「get」にブレークポイントを入れました
static readonly LawClass s_Law = new LawClass();
public static LawClass Law { get { return s_Law; } }
s_law が null であることがわかりました。
それはどのように可能ですか?静的変数は、最初のクラスにアクセスする前に行ごとに初期化されると思いました。
「get」にブレークポイントを入れました
static readonly LawClass s_Law = new LawClass();
public static LawClass Law { get { return s_Law; } }
s_law が null であることがわかりました。
それはどのように可能ですか?静的変数は、最初のクラスにアクセスする前に行ごとに初期化されると思いました。
これは単なる推測ですが、http://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspxから:
静的コンストラクター (セクション 10.11) がクラスに存在する場合、静的フィールド初期化子の実行は、その静的コンストラクターを実行する直前に発生します。それ以外の場合、静的フィールド初期化子は、そのクラスの静的フィールドを最初に使用する前に、実装に依存する時点で実行されます。
プロパティ ゲッターでブレークした場合、静的バッキング フィールドはまだアクセスされていないため、初期化されている場合とされていない場合があります。
助けてくれてありがとう!スタック トレースを調べたところ、静的変数の初期化順序にクレイジーな再帰があることがわかりました。そのため、コードを単純化したところ、動作するようになりました。