내 C# 속성은 언제 초기화됩니까?
-
11-07-2019 - |
문제
나는 정확히 내 재산이 초기화 될 때에 대해 약간 혼란스러워합니다.
다음과 같이 선언 된 속성이 있다고 가정합니다.
private Dictionary<string, Dictionary<string,string>> MessageLookup
{
get
{
return messages ?? doSomething();
}
}
복용량 메소드는 메시지 사전을 채우고 반환합니다.
내 질문은 언제이 코드가 실행됩니까? DoSomething 코드에 중단 점을 배치하면 적중하지 않지만 Debugger에서 볼 때 Messagelookup 속성이 데이터를 보유하고 있습니다 (여기에 초기화 된 유일한 장소).
이 코드는 건설시 실행됩니까? 변수 이름을 가리킬 때 디버거가 자동으로 실행됩니까? 그렇다면 왜 브레이크 포인트가 맞지 않습니까?
해결책
이 코드는 누군가가 아닌 속성을 언급 할 때마다 실행됩니다.
디버거를 사용하는 경우 디버거가 속성 값을 자동으로 가져 오려고 시도하기 때문에 볼 수 있습니다 (따라서 객체의 상태를 볼 수 있음). 디버거가 브레이크 포인트를 무시하는 동안 자체적으로 속성을 평가하는지 모르겠습니다. 모든 것을 설명 할 것입니다.
코드를 실행해보십시오 ~ 아니다 디버거에서 일부 코드에 액세스하십시오.
var lookup = someObject.MessageLookup;
만들다 doSomething()
스택 추적을 버리면 무슨 일이 일어나고 있는지 알 수 있습니다.
제휴하지 않습니다 StackOverflow