我有一个类如下:
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: " );
}
}
答案 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变为可以解决这个问题。
此外,请注意,通过将其设为属性而不是直接访问该字段,您:
答案 2 :(得分:1)
我不想回收其他人所说的话,但是......
您需要查看访问修饰符。你说你不想让numberOfTrainee公开,但你可以把它变成内部的。这样,如果Trainee
和TraineeUI
位于同一个程序集中,则TraineeUI
可以访问Trainee
字段,而不会将字段暴露给程序集外部的类型。
我会把它变成属性而不是字段。
答案 3 :(得分:0)
好吧,要么你可以把它公之于众,然后用它来调用:
Trainee.numberOfTrainee
或者您可以创建静态只读属性。
public static int NumberOfTrainee
{
get
{
return numberOfTrainee;
}
}