C#中Static的用法

时间:2023-01-31 19:14:56

用法:

静态变量

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     }