是否有任何好的情况让一个类的所有对象共享变量会很好?当然还有常数。
答案 0 :(得分:0)
没有一个答案。有各种各样的理由可以使用而不是使用。例如,一个类计数器检查从这个类创建的实例可以是一个类中的静态变量。这真的取决于你的编程和原因。
如果您在第一个答案上看here,那么还有一些答案
答案 1 :(得分:0)
静态变量可用于在类的所有实例之间共享变量,如下例所示:
class Program
{
static void Main(string[] args)
{
//Create new instances of the Employee class
Employee joe = new Employee("joe", 1);
Employee billy = new Employee("billy", 2);
Console.WriteLine(Employee.EmployeeCount);
Console.ReadKey();
}
}
class Employee
{
public string Name { get; set; }
public int ID { get; set; }
public static int EmployeeCount { get; set; }
public Employee(string n, int id)
{
this.ID = id;
this.Name = n;
EmployeeCount++;
}
}
与静态变量相反,实例变量允许每个Employee
类拥有自己的Name
和ID
变量。
答案 2 :(得分:0)
答案是是,在某些情况下,您希望使用静态变量,并让所有类的实例共享此变量。
让我们说你有一本书。您可以通过添加bookCount的静态字段来跟踪书籍数量,并在创建图书时增加其值。
您可以查看@pcnThird答案以获取代码示例。
当我想使用一个应该表现为常量字段的字段时,我发现静态字段最有效,但我无法在编译时知道它的值。
例如,假设您有一个日志类。您可以创建此日志类的许多实例,并且每个实例都将记录到文件系统上的其他位置
如果您希望所有日志文件都具有相同的前缀(包括日期),则它不能是常量,因为日期有一个烦人的改变习惯......
解决方案可以是static
字段(我通常更喜欢static readonly
,它在构造函数完成它的工作后充当常量。)
Public class Log
{
public static readonly string LogFilenamePrefix;
Public Static Log()
{
Log.LogFilenamePrefix = DateTime.Today.ToString()+"_MyLogFile";
}
}
在此示例中,您还可以看到DateTime类使用静态Today
变量,这将带我进入下一个示例:
当然,静态类的情况是你没有选择但使用静态变量......
P.S。有些人认为静态变量是邪恶的。看看this SO post。