C#静态构造函数
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

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

程序输出1,3
输出1,是因为第一次引用静态成员引发了静态构造函数……
最后,记住一点:类的静态构造函数在给定应用程序域中至多执行一次,只有创建类的实例或者引用类的任何静态成员才引发静态构造函数