2010-10-19 17 views
18

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

+0

这是在几个问题中讨论的,包括[静态字段初始化如何在C#中工作? (http://stackoverflow.com/questions/710793/how-does-static-field-initialization-work-in-c)和[什么是C#中的静态变量初始化顺序? (http://stackoverflow.com/questions/1405709/what-is-the-static-variable-initialization-order-in-c)。 – 2010-10-19 07:09:43

+1

@Matthew - 很好的链接,但是对于CLI 4,它们可能是错的 - 或者说:不完整; [看到这里](http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-in​​itialization-changes-in-net-4-0.aspx) – 2010-10-19 07:13:43

回答

25

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

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

乔恩斯基特对这个herehere

+2

+1“我不会代码到任何特定行为“,明智的建议 – smirkingman 2010-10-19 07:43:43

+1

”常规代码“涵盖什么? – 2014-04-30 03:52:24

+1

@DaviddCeFreitas“不反射的东西”(和其他作弊) – 2014-04-30 06:42:19

-6

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

0

静态变量一个很好的写了进入画面对应的类加载后。 它不是在构造函数调用之后,因为构造函数调用在我们使用new运算符创建类的对象时发挥作用,并且静态变量在类级别上不在对象级别上可用。