2017-02-16 7 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の基底クラスがたTextReaderから派生SynctextReaderあります。

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'があります)。 –

関連する問題