2012-07-23 7 views
2

나는에 중단 점을 넣어 가지고정적 변수 초기화 순서

static readonly LawClass s_Law = new LawClass(); 
public static LawClass Law { get { return s_Law; } } 

을 "얻을"및 s_law가 null의 발견.

어떻게 가능합니까? 나는 static 변수가 first-class 접근 전에 그리고 line-by-line 순서로 초기화되었다고 생각했다.

+1

실제 답변 일 가능성은 낮지 만 null로 다시 설정하는 정적 생성자가있을 수 있습니다 (즉, 개발자가 의미가 있음). 또한 앞으로는 텍스트 그림이 아닌 텍스트로 코드 스 니펫을 제공 할 수 있습니까? – Servy

+0

getter에서's_Law'를 체크하고 그것이 null 인 경우 새로운 인스턴스로 설정하는 것은 어떻습니까? – mgnoonan

+0

@mgnoonan 글쎄, 그것은'읽기 전용'이므로, 시도하면 설정할 수 없습니다. 그 너머. 요점은 값으로 초기화되었으므로 결코 null이 아니어야하며 이후에 변경할 수 없다는 것입니다. – Servy

답변

4

이것은 단지 추측이지만 http://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspx에서 :

정적 생성자 (섹션 10.11)는 클래스에 존재하는 경우, 정전기 필드 초기화 실행 정적 생성자 것을 을 실행하기 직전에 일어난다. 그렇지 않으면 해당 클래스의 정적 필드을 처음 사용하기 전에 구현 종속적 인 시간에 실행되는 정적 필드 초기화 프로그램이 입니다.

속성 가져 오기 도구를 중단하면 정적 보조 필드가 아직 액세스되지 않았으므로 초기화되었을 수도 있고 초기화되지 않았을 수도 있습니다.

+0

현재 깨진 곳에서는 s_Law의 정의 된 값을 필요로하는 코드 줄이 아직 필요하지 않습니다. 다음 줄에는 값이 필요하며 그 시점에 초기화가 발생할 것으로 예상됩니다. Statics는 게으르지 않아도되지만 Microsoft CLR에서는 일반적으로 정적입니다. – KeithS

0

도움을 주셔서 감사합니다. 나는 스택 추적을보고 내 정적 변수 초기화 순서에서 미친 재귀를 발견했다. 그래서 코드를 단순화하고 이제는 작동합니다.