2014-12-23 3 views
1

.net 소스 코드에서 더 구체적으로 ito mscorlib 소스에서 읽었으며 Stream 클래스가 구현 된 방법을 보지 못했습니다. 코드 :mscorlib 소스 스트림에서 StackOverflowException을 throw해야합니다.

public static readonly Stream Null = new NullStream(); 

그리고 나서 "NullStream은 예외를 throw하지 않으면 스트림 대기에서 파생됩니까?"라고 생각합니다.

무엇을 내 마음 겪었된다 codeflow 을 여기 스트림의 경로 인 sourcecode 입니다 :

프로젝트 -> mscorlib에 경로 => 시스템/IO/stream.cs

+1

왜'StackOverflowException'입니까? 'Null'은'Stream' 내부에서'static'으로 선언됩니다 (하나의 인스턴스가 생성됩니다). 그리고 호출도 아닙니다 ... –

+0

정적이 아닌 경우 : 확실합니다. 하지만, 그렇습니다 ... 아니오 –

답변

1

있는 StackOverflowException이 코드로 예상된다 :

public readonly Stream Null=new NullStream() 

스트림 C를 호출합니다 NullStream의 생성자를 호출하기 때문에 Null 필드를 초기화해야하는 onstructor (부모 클래스)는 NullStream()을 호출합니다 ....
하지만 이건 정적입니다! 정적 필드의 초기화는 객체가 생성되기 전에 한 번만 수행됩니다. NullStream()을 호출하면 Stream()이 호출되지만 후자는 생성자가 정적 필드를 초기화하지 않기 때문에 Null을 초기화하지 않습니다. 이리).
우리가 정적 생성자를 가졌다 고해도, 객체가 생성되기 전에 한 번만 호출됩니다.

+0

실종, 고맙습니다 =) – Patrick