C# 如何使用其他类中的以下静态变量?

C# 如何使用其他类中的以下静态变量?,c#,.net,C#,.net,我的课程如下: public class Trainee { private static int numberOfTrainee = 30; private string traineeName; private string tarineeId; } 现在我想访问下一个类中的静态数据“numberOfTrainee”,而不创建“Trainee”类的对象,我不想为“numberOfTrainee”编写getter。因为,静态成员只能使用“.”运算符 public

我的课程如下:

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

    }
}

好吧,要么你把它公之于众,然后打电话告诉我:

Trainee.numberOfTrainee
或者您可以创建一个静态只读属性

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

好吧,要么你把它公之于众,然后打电话告诉我:

Trainee.numberOfTrainee
或者您可以创建一个静态只读属性

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

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

public class Trainee
{    
    private static int numberOfTrainee = 30;

    public int TraineeCount { get { return numberOfTrainee; } }

    private string traineeName;
    private string tarineeId;
}
请注意,您可能需要考虑线程安全性…这个简单的实现可能会在多线程环境中产生过时的结果。使
numberOfTrainee
volatile可以解决这个问题

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

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

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

      public class Trainee
      {    
          private static int numberOfTrainee = 30;
      
          public int TraineeCount { get { return numberOfTrainee; } }
      
          private string traineeName;
          private string tarineeId;
      }
      
      请注意,您可能需要考虑线程安全性…这个简单的实现可能会在多线程环境中产生过时的结果。使
      numberOfTrainee
      volatile可以解决这个问题

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

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

      如果您不想使用getter,那么从其他地方使用它的唯一方法就是增加可见性,如下所示:

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

      但是,我建议不要使用可以更改的字段。除非它是一个常量,否则您应该定义一个
      属性来控制对该字段的访问,不管是静态的还是非静态的。

      如果您不想为它使用getter,那么从其他地方使用它的唯一方法就是增加可见性,如下所示:

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

      但是,我建议不要使用可以更改的字段。除非它是一个常量,否则您应该定义一个
      属性来控制对该字段的访问,无论是静态的还是非静态的。

      我不想重复别人说过的话,但是

      您需要查看访问修饰符。你说你不想让NumberOf培训生公开,但你可以让它内部化。这样,如果
      培训生
      培训生ui
      在同一程序集中,则
      培训生ui
      可以访问
      培训生
      的字段,而不会将该字段暴露于程序集之外的类型


      我想把它变成一个属性而不是一个字段。

      我不想重复别人说过的话,但是

      您需要查看访问修饰符。你说你不想让NumberOf培训生公开,但你可以让它内部化。这样,如果
      培训生
      培训生ui
      在同一程序集中,则
      培训生ui
      可以访问
      培训生
      的字段,而不会将该字段暴露于程序集之外的类型


      不过我会把它变成一个属性,而不是一个字段。

      我不想把“numberOfTrainee”公之于众。那我该怎么办?(也许我在问一个愚蠢的问题!!)但是你需要/渴望在课堂之外访问这个价值观,这意味着你确实想把它公之于众。如果您能告诉我们您不想公开的原因,我们可能会更清楚地回答您的问题。:谢谢@Daz Lewis::实际上,我只是好奇,如果不在同一个程序集中编写属性,是否可能从其他类访问私有静态数据。谢谢。我不想把“NumberOf培训生”公之于众。那我该怎么办?(也许我在问一个愚蠢的问题!!)但是你需要/渴望在课堂之外访问这个价值观,这意味着你确实想把它公之于众。如果您能告诉我们您不想公开的原因,我们可能会更清楚地回答您的问题。:谢谢@Daz Lewis::实际上,我只是好奇,如果不在同一个程序集中编写属性,是否可能从其他类访问私有静态数据。谢谢。谢谢Abbott先生的建议。谢谢Abbott先生的建议。谢谢Rich先生的安全建议。谢谢Rich先生的安全建议。