静态字段什么时候出现?

Dr *_*ojo 5 .net c#

我试图了解什么时候确实存在静态字段并且已经阅读了这篇MSDN文章 - http://msdn.microsoft.com/en-us/library/79b3xss3 - 但它似乎自相矛盾:

首先它说:

静态成员在第一次访问静态成员之前和静态构造函数(如果有的话)被调用之前被初始化.

但后来它继续说:

如果您的类包含静态字段,请提供一个静态构造函数,在加载类时初始化它们.

所以,我的问题基本上是这样的:什么时候静态字段实际初始化,什么时候它们首先出现?是在调用静态构造函数之前,期间还是之后?

非常感谢!

Ree*_*sey 8

C#语言规范声明(in 10.5.5.1 Static field initialization):

类的静态字段变量初始值设定项对应于以它们出现在类声明中的文本顺序执行的赋值序列.如果类中存在静态构造函数(第10.12节),则在执行该静态构造函数之前立即执行静态字段初始值设定项.否则,静态字段初始化器在第一次使用该类的静态字段之前的实现相关时间执行

我相信你的第二行中的指导实际上是使用字段初始化器初始化未内联完成的静态字段.在这种情况下,您应该使用静态构造函数来保证在使用之前初始化它们.

从规范中可以看出,它们产生的实际"时间"是特定于实现的,并且可能会发生变化.唯一的保证是它们将在调用静态构造函数之前存在,它将始终在代码中使用之前发生.该规范陈述(在10.12中):

静态构造函数的执行由应用程序域中发生的以下第一个事件触发:

·创建类类型的实例.

·引用类类型的任何静态成员.