C#プロパティはいつ初期化されますか?
-
11-07-2019 - |
質問
プロパティが正確に初期化されるタイミングについて少し混乱しています。
次のように宣言されたプロパティがあるとします:
private Dictionary<string, Dictionary<string,string>> MessageLookup
{
get
{
return messages ?? doSomething();
}
}
doSomethingメソッドは、メッセージディクショナリにデータを入力して返します。
私の質問は、このコードはいつ実行されるのですか? doSomethingコードにブレークポイントを配置してもヒットしませんが、デバッガーで表示したときにMessageLookupプロパティがデータを保持しています(これが初期化される唯一の場所です)。
このコードは構築時に実行されますか?変数名にカーソルを合わせると、デバッガーは自動的に実行しますか?もしそうなら、なぜブレークポイントにヒットしないのですか?
解決
このコードは、だれかがプロパティを参照するたびに実行されます。以前ではありません。
デバッガーを使用する場合、デバッガーはプロパティ値を自動的に取得しようとするため(オブジェクトの状態を確認できるため)表示されます。デバッガがそれ自体のプロパティを評価している間にブレークポイントを無視するかどうかはわかりません-それがすべてを説明します。
デバッガでコードを実行しないでください 、プロパティにアクセスするコードを作成します:
var lookup = someObject.MessageLookup;
doSomething()
でスタックトレースをダンプすると、何が起こっているのかがわかります。
所属していません StackOverflow