Вот часть моего кода:Когда запускаются статические объявления?
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
имеет значение null, что означает, что код конструктора не был вызван! Здесь есть какая-то темная магия, и я очень благодарен за объяснение.
Спасибо!
EDIT - извините за отсутствие репродуцирования. Мой фактический код (очевидно) более сложный, чем этот, поэтому я попытался заглушить его, и, очевидно, в этом процессе я должен удалить некоторые другие препятствия для правильной функции кода. Но Kobi's answer действительно то, что я пытался выбраться из этого вопроса, так или иначе - так ответьте ему. :)
Этот код даже не компилируется, так как у вас нет установщика для свойства Value. –
Какой компилятор? Работает отлично под VS2008/.NET3.5, как только я добавляю сеттер для свойства Value. –
В любом случае, мало что можно добавить к http://stackoverflow.com/questions/1405709/what-is-the-static-variable-initialization-order-in-c – Kobi