est ici un morceau de mon code:Quand les déclarations statiques sont-elles exécutées?
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
}
}
Je ne comprends pas comment cela peut être. _MyObj
n'est pas nul, ce qui signifie que l'affectation en ligne a bien fonctionné, mais _MyObj.Value
est nul, ce qui signifie que le code du constructeur n'a pas été invoqué! Il y a de la magie noire à l'œuvre ici, et j'apprécierais grandement une explication.
Merci!
EDIT - Désolé pour le non repro. Mon code réel est (évidemment) plus complexe que celui-ci, donc j'ai essayé de le bousculer, et évidemment dans le processus j'ai dû enlever une autre obstruction à la fonction propre du code. Mais Kobi's answer est vraiment ce que j'essayais de sortir de cette question, de toute façon - alors répondez crédit à lui. :)
Ce code ne sera même pas compilé, car vous n'avez pas de setter pour la propriété Value. –
Quel compilateur? Fonctionne bien sous VS2008/.NET3.5 dès que j'ajoute un setter pour la propriété Value. –
De toute façon, il y a peu à ajouter à http://stackoverflow.com/questions/1405709/what-is-the-static-variable-initialization-order-in-c – Kobi