2017-02-16 2 views

답변

1

그래서 Console.InTextReader에 중첩 된 클래스 유형 System.IO.TextReader.SyncTextReader입니다 결과는

System.IO.TextReader+SyncTextReader 

입니다

Console.WriteLine(Console.In.GetType()); 

을보십시오.

은 만 특성Console.InSyncTextReader 분명히에서 파생 TextReader로 선언된다.

그래서 상속의 관점에서, 문장 정확 " Console.In TextReader의 인스턴스입니다."


업데이트 : (Jamiec은 주석으로) 사실이 SyncTextReaderStreamReader의 기본 인스턴스를 가지고있다. 이 인스턴스는 __ConsoleStream 유형의 기본 인스턴스로 만들어집니다.

+0

확실히 그 유형을 반환하는'TextReader.Synchronized'에 대한 호출 뿐만이 아닙니다. 그 밑에는 실제로 [Disassembly] (http://www.dotnetframework.org/default.aspx/[email protected]/[email protected]/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/clr/)의 'StreamReader'처럼 보입니다. src/BCL/System/Console @ cs/1305376/Console @ cs) – Jamiec

+0

@Jamiec은 장식 체인을 사용하여 내 대답을 업데이트합니다. 문구를보다 명확하게 설명하기 위해 –

0

기본 클래스 Console.In입니다. SynctextReader은 TextReader에서 파생됩니다.

1

TextReader를가 추상 클래스를 참조하십시오, 그래서 어떻게 인스턴스 Console.In을 가질 수있다?

당신은 논리적으로 맞지만 실제로는 "나는 [추상적 인 클래스]의 인스턴스가있다"고 말할 때 당신이 실제로 의미하는 것이 "나는 구체적인 예를 가지고있다. 추상 클래스를 상속받은 클래스 "라고합니다. 그것은 인터페이스와 동일합니다. "IFoo의 인스턴스가 있습니다."실제로 "IFoo가 설정 한 계약을 준수하는 클래스의 인스턴스가 있습니다."라는 뜻입니다.

특정 질문에 대해서는 disassembly is available 그리고 기본적으로 옳다는 것을 알 수 있습니다.실제 유형은 당연히 TextReader을 상속받은 구체적인 클래스입니다. StreamReader 인스턴스 주위에 TextReader.Synchronized을 사용합니다.

.... 

tr = TextReader.Synchronized(new StreamReader(s, enc, false, 
               _DefaultConsoleBufferSize, false)); 
.... 
+0

Upvote를 추적 할 수 있습니다. (그리고 단지 완료 될 : 그'StreamReader'에는 또 다른'__ConsoleStream'이 있습니다, 당신이 보여주는 생성자 호출에서's'). –

관련 문제