我已将断点放入“get”
static readonly LawClass s_Law = new LawClass();
public static LawClass Law { get { return s_Law; } }
并发现s_law为null。
怎么可能?我认为静态变量是在第一次类访问之前初始化的,并且是逐行的。
答案 0 :(得分:4)
这只是猜测,但来自http://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspx:
如果类中存在静态构造函数(第10.11节),则执行 静态字段初始化程序在执行之前立即发生 那个静态构造函数。 否则,静态字段初始值设定项为 在第一次使用之前的执行相关时间执行 该类的静态字段。
如果你破坏了属性getter,那么尚未访问静态支持字段,因此可能已经初始化了,也可能没有。
答案 1 :(得分:0)
谢谢你们的帮助!我查看了堆栈跟踪,发现我的静态变量初始化顺序中有一些疯狂的递归。所以我简化了代码,现在它可以工作。