C#中的静态变量何时被初始化?

35

我想知道一个静态变量(在一个类中)何时出现(初始化)?是在实例构造函数第一次调用之后还是在类加载之后?类的加载是在什么时候发生?


这个问题在多个问题中都有讨论,包括在C#中静态字段初始化是如何工作的?在C#中静态变量初始化顺序是什么? - Matthew Flaschen
1
@Matthew - 非常好的链接,但是在CLI 4中,它们可能不正确,或者说:不太完整,请参见此处。http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx - Marc Gravell
2个回答

40

哦,那很复杂。这取决于是否设置了beforefieldinit标志,而这又(在C#中)取决于是否存在静态构造函数。更糟糕的是,在.NET 4中,我相信行为已经改变,使它比以前更“懒惰”。

坦白地说,在这里我不会编写任何特定的行为代码;只要使用常规代码访问它们,静态字段将在您尝试使用它们之前初始化。

Jon Skeet在这里有一个很好的解释。


1
静态变量在相应的类加载后出现。它不是在构造函数调用之后,因为构造函数调用是在我们使用new运算符创建类对象时发挥作用,并且静态变量可在类级别上使用而不是对象级别上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接