什么时候静态声明运行?

时间:2009-12-22 07:25:01

标签: c# static

这是我的一段代码:

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不为null,这意味着内联赋值确实有效,但_MyObj.Value出现null,这意味着没有调用构造函数代码!这里有一些黑魔法,我非常感谢你的解释。

谢谢!

编辑 - 抱歉没有复制品。我的实际代码(显然)比这更复杂,所以我试图将其愚蠢,显然在这个过程中我必须删除一些其他阻碍代码的正常功能。但Kobi's answer确实是我试图摆脱这个问题的 - 无论如何 - 所以回答他的信任。 :)

3 个答案:

答案 0 :(得分:2)

初始化静态成员的正确方法是使用static constructor

static AnotherClass(){
  _MyObj = new MyClass(new object());
}

答案 1 :(得分:2)

状态:无重复。

提供的代码示例无法编译,public object Value { get; }不是有效的自动属性。

private set;修复后,它编译并运行无错误。

答案 2 :(得分:1)

放置一个setter,它将按预期工作:

public object Value { get; set; }