什么时候静态变量在C#中初始化?

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

哦,这很复杂。 这取决于是否设置了beforefieldinit标志,反过来(在C#中)取决于是否存在静态构造函数。 而且更糟; 在.NET 4中, 我认为行为发生了变化,使其比以前更加“懒惰”。

坦率地说,我不会在这里对任何具体行为进行编码; 简单地说:静态字段将在您尝试使用它们之前进行初始化,只要您使用常规代码来访问它们。

Jon Skeet在这里和这里都有很好的写作

静态变量在相应的类加载后进入图片。 它不是在构造函数调用之后,因为构造函数调用在我们使用new运算符创建类的对象时起作用,而静态变量在类级别而不是在对象级别上可用。

它可能取决于编程语言和环境,但通常在类加载时初始化静态变量。