MSDN的定义:静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
背后隐藏不少东西,看代码:
1
class
Program
2 {
3 static void Main(string[] args)
4 {
5 Class1 o1 = new Class1();
6 Class1 o2 = new Class1();
7 Console.WriteLine(Class1.Count);
8 }
9 }
10
11 class Class1
12 {
13 public static int Count = 0;
14
15 static Class1()
16 {
17 Count++;
18 }
19
20 public Class1()
21 {
22 Count++;
23 }
24
25 }
2 {
3 static void Main(string[] args)
4 {
5 Class1 o1 = new Class1();
6 Class1 o2 = new Class1();
7 Console.WriteLine(Class1.Count);
8 }
9 }
10
11 class Class1
12 {
13 public static int Count = 0;
14
15 static Class1()
16 {
17 Count++;
18 }
19
20 public Class1()
21 {
22 Count++;
23 }
24
25 }
结果Class1.Count=3,
正如定义说的,在创建第一个实例的时候会值执行静态构造函数,执行后count=1,要点是,静态构造函数就想一个辅助的东西一样,在最先执行完静态构造函数后类的构造函数依然执行,所以这是count++后,count=2了,再次创建实例o2,这时已经是创建第二个实例了,静态构造函数不再执行,所以只执行构造函数,那么count++后,count=3了。
再看下引用静态成员:
1
class
Program
2 {
3 static void Main(string[] args)
4 {
5 Console.WriteLine(Class1.Count);
6 Class1 o1 = new Class1();
7 Class1 o2 = new Class1();
8 Console.WriteLine(Class1.Count);
9 }
10 }
11
12 class Class1
13 {
14 public static int Count = 0;
15
16 static Class1()
17 {
18 Count++;
19 }
20
21 public Class1()
22 {
23 Count++;
24 }
25
26 }
2 {
3 static void Main(string[] args)
4 {
5 Console.WriteLine(Class1.Count);
6 Class1 o1 = new Class1();
7 Class1 o2 = new Class1();
8 Console.WriteLine(Class1.Count);
9 }
10 }
11
12 class Class1
13 {
14 public static int Count = 0;
15
16 static Class1()
17 {
18 Count++;
19 }
20
21 public Class1()
22 {
23 Count++;
24 }
25
26 }
程序输出1,3
输出1,是因为第一次引用静态成员引发了静态构造函数……
最后,记住一点:类的静态构造函数在给定应用程序域中至多执行一次,只有创建类的实例或者引用类的任何静态成员才引发静态构造函数