2010-08-12 36 views
1

我有一类像以下:我将如何使用其他类的以下静态变量?

public class Trainee 
{ 

    private static int numberOfTrainee = 30; 

    private string traineeName; 
    private string tarineeId; 
} 

现在我要访问的静态数据“numberOfTrainee”在下面的类,而无需创建“见习”类的对象,我不想写getter方法“numberOfTrainee”。因为,静态成员只能使用“。”。运营商。

public class TraineeUI : Form 
{ 
    private void showButton_Click(object sender, EventArgs e) 
    { 
     // I want to access "numberOfTrainee" here. Something like following: 
     // MessageBox.Show("Total number of trainee is: "); 

    } 
} 

回答

1

我不想回收别人怎么说,但是....

你需要看的访问修饰符。你说你不想公开numberOfTrainee,但你可以让它成为内部的。这样,如果TraineeTraineeUI在同一个组件中,那么比TraineeUI可以访问Trainee的字段,而不会将该字段暴露给组件外的类型。

虽然我会让它成为属性而不是字段。

+0

感谢Abboutt先生提出的建议。 – Towhid 2010-08-12 09:53:28

0

嘛,要么你可以把它公开,然后就用calll它:

Trainee.numberOfTrainee 

或者你可以创建一个静态只读属性。

public static int NumberOfTrainee 
{ 
    get 
    { 
     return numberOfTrainee; 
    } 
} 
+0

我不想让“numberOfTrainee”公开。那我该怎么办? (可能是我要求愚蠢的问题!!) – Towhid 2010-08-12 09:23:29

+1

但是,您需要/想要在班级以外访问价值意味着您想要公开它。 如果您可以给我们一些指示,说明您为什么不希望将其公开,以便我们能够更清楚地回答您的问题。 – 2010-08-12 09:31:41

+0

:谢谢ho1。 @Daz Lewis ::其实我只是好奇是否有可能或不可能从其他类访问私有静态数据,而无需在同一个程序集中编写属性。谢谢。 – Towhid 2010-08-12 09:49:28

3

你应该做一个财产,像这样:

public class Trainee 
{  
    private static int numberOfTrainee = 30; 

    public int TraineeCount { get { return numberOfTrainee; } } 

    private string traineeName; 
    private string tarineeId; 
} 

注意,你可能要考虑线程安全......它可能是这个简单的实现会给陈旧导致多线程环境。制造numberOfTrainee易变将解决此问题。

而且,请注意,通过使之成为一个属性而不是给外地的直接访问,您:

  • 可以添加额外的逻辑,你应该想给
  • 可以使财产只读,但是从类中修改字段
  • 保持完整的封装:一个属性是一个类的API的一部分,而一个字段是一个实现细节
+0

谢谢Skeet先生。 – Towhid 2010-08-12 09:50:58

4

如果你不想为它吸气,用它从其他地方将是提高知名度,像这样的必由之路:

public class Trainee 
{ 
    public static int NumberOfTrainee = 30; 
    private string traineeName; 
    private string tarineeId; 
} 

// Other code. 
MessageBox.Show("Total number of trainee is: " + Trainee.NumberOfTrainee); 

不过,我会建议不要与现场这样说可以换。除非它是一个常量,否则您应该定义一个property来控制对该字段的访问,无论是否为静态。

+0

非常感谢您的安全相关建议。 – Towhid 2010-08-12 10:01:50

相关问题