用法:
静态变量
C# 不支持静态局部变量(在方法范围内声明的变量)。静态变量是存储咋全局数据的。初始化,如果没有显示初始化,会被默认初始化为默认值。始终驻留在全局数据区,直到程序运行结束。作用域会存在不同,全局变量的作用于全局,局部变量作用于局部,但是生命周期是一样的。
对于静态数据成员,属于所有该类的实例的共享,因此它不属于任何一个实例(类对象),可以使用类对其进行直接操作,但是所有的实例拥有的都是相同的。
静态字段有两个常见的用法:一是记录已实例化对象的个数,二是存储必须在所有实例之间共享的值。
静态函数
静态成员函数与类想联系,不和类对象进行联系。
静态成员不能够访问非静态数据成员。静态函数无法使用非静态成员,因为静态函数属于类的,而非静态成员属于实例的。
静态构造函数
至多执行一次,在该类被第一次调用时执行,只有在创建类的实例或者引用类的任何静态成员时,才会被激发静态构造函数。
只能对静态字段进行初始化。
不能够添加访问修饰符,只能够是私有的,同样没有参数。
如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。
静态类
静态类和非静态类基本相同,但是存在一个区别:静态类无法进行实例化,也就是说不可以使用new创建静态类类型的变量。因为没有实例变量,因此只能使用类名本身访问静态类成员。
静态类是密封的,无法被继承,不能够从出Object外的任何类中继承。
不能够包含实例构造函数,对于其静态构造函数,只会调用一次,在程序驻留的应用程序域的生存期内,静态类会一直保留在内存中。
什么时候使用静态类?
https://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx
类中的行为和数据不需要依赖任何实例对象。可以直接调用类中的方法和属性。当静态类被Program第一次引用时,会被直接加载到.Net Framework CLR,并且一直伴随Program整个生命周期。
一个类的初始化顺序:
静态成员变量,静态构造函数,成员变量,构造函数。
Case:
1 public class AA 2 { 3 public static int X; 4 static AA() 5 { 6 X = BB.Y + 1; 7 Console.WriteLine("Static AA()"); 8 } 9 } 10 11 public class BB 12 { 13 public static int Y = AA.X + 1; 14 static BB() 15 { 16 Console.WriteLine("Static BB()"); 17 } 18 19 } 20 21 22 public class TestOutPut 23 { 24 static int test = 0; 25 public void Output() 26 { 27 28 Console.WriteLine("X: {0}, Y: {1}", AA.X, BB.Y); 29 } 30 }