我将如何使用来自其他类的以下静态变量?

时间:2010-08-12 09:15:53

标签: c# .net

我有一个类如下:

public class Trainee
{

    private static int numberOfTrainee = 30;

    private string traineeName;
    private string tarineeId;
}

现在我想在下面的类中访问静态数据“numberOfTrainee”,而不创建“Trainee”类的对象,我不想为“numberOfTrainee”编写getter。因为,静态成员只能使用“。”。操作

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: " );

    }
}

4 个答案:

答案 0 :(得分: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来控制对这个字段的访问,不管是不是静态的。

答案 1 :(得分:3)

你应该创建一个属性,如下所示:

public class Trainee
{    
    private static int numberOfTrainee = 30;

    public int TraineeCount { get { return numberOfTrainee; } }

    private string traineeName;
    private string tarineeId;
}

请注意,您可能需要考虑线程安全性......这种简单的实现可能会在多线程环境中提供过时的结果。使numberOfTrainee volatile变为可以解决这个问题。

此外,请注意,通过将其设为属性而不是直接访问该字段,您:

  • 如果您希望
  • 可以添加额外的逻辑
  • 可以使属性只读,但可以在类
  • 中修改字段
  • 保持封装完整:属性是类的API的一部分,而字段是实现细节

答案 2 :(得分:1)

我不想回收其他人所说的话,但是......

您需要查看访问修饰符。你说你不想让numberOfTrainee公开,但你可以把它变成内部的。这样,如果TraineeTraineeUI位于同一个程序集中,则TraineeUI可以访问Trainee字段,而不会将字段暴露给程序集外部的类型。

我会把它变成属性而不是字段。

答案 3 :(得分:0)

好吧,要么你可以把它公之于众,然后用它来调用:

Trainee.numberOfTrainee

或者您可以创建静态只读属性。

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