静态变量初始化顺序

时间:2012-07-23 18:17:26

标签: c#

我已将断点放入“get”

static readonly LawClass s_Law = new LawClass();
public static LawClass Law { get { return s_Law; } }

并发现s_law为null。

怎么可能?我认为静态变量是在第一次类访问之前初始化的,并且是逐行的。

2 个答案:

答案 0 :(得分:4)

这只是猜测,但来自http://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspx

  

如果类中存在静态构造函数(第10.11节),则执行   静态字段初始化程序在执行之前立即发生   那个静态构造函数。 否则,静态字段初始值设定项为   在第一次使用之前的执行相关时间执行   该类的静态字段

如果你破坏了属性getter,那么尚未访问静态支持字段,因此可能已经初始化了,也可能没有。

答案 1 :(得分:0)

谢谢你们的帮助!我查看了堆栈跟踪,发现我的静态变量初始化顺序中有一些疯狂的递归。所以我简化了代码,现在它可以工作。