这里有一块我的代码:静态声明何时运行?
public class MyClass {
public object Value { get; set; }
public MyClass(object value) {
this.Value = value;
}
}
public class AnotherClass {
private static MyClass _MyObj = new MyClass(new object());
public static void Main(string[] args) {
var x = _MyObj; // no problem
var y = x.Value; // no problem
var z = y.ToString(); // Null ref exception
}
}
我不明白这是如何。 _MyObj
不为空,这意味着内联分配确实起作用,但_MyObj.Value
出现空,表示构造函数代码未被调用!这里有一些黑魔法,我非常感谢解释。
谢谢!
编辑 - 抱歉没有repro。我的实际代码(显然)比这个更复杂,所以我试图把它弄糊涂,显然在这个过程中,我必须去除代码的正确函数的其他障碍。但是,Kobi's answer真的是我试图摆脱这个问题,无论如何 - 所以回信他。 :)
此代码甚至不会编译,因为您没有Value属性的setter。 – 2009-12-22 07:29:28
哪个编译器?只要为Value属性添加setter,就可以在VS2008/.NET3.5下正常工作。 – 2009-12-22 07:32:13
无论哪种方式,都很少添加到http://stackoverflow.com/questions/1405709/what-is-the-static-variable-initialization-order-in-c – Kobi 2009-12-22 07:35:26