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
}
class Program2
{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 Class112
{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
}
class Program2
{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 Class113
{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,是因为第一次引用静态成员引发了静态构造函数……
最后,记住一点:类的静态构造函数在给定应用程序域中至多执行一次,只有创建类的实例或者引用类的任何静态成员才引发静态构造函数

浙公网安备 33010602011771号