は`Console.In`は` StreamReader`のインスタンスですか? .NET Frameworkクラスライブラリ、本の中で
Console.In
がTextReader
のインスタンスであると述べています。
は抽象クラスなので、どのようにインスタンスConsole.In
を持つことができますか?
StreamReader
は、派生クラスのTextReader
であり、非抽象クラスです。 Console.In
はStreamReader
のインスタンスですか?
は`Console.In`は` StreamReader`のインスタンスですか? .NET Frameworkクラスライブラリ、本の中で
Console.In
がTextReader
のインスタンスであると述べています。
は抽象クラスなので、どのようにインスタンスConsole.In
を持つことができますか?
StreamReader
は、派生クラスのTextReader
であり、非抽象クラスです。 Console.In
はStreamReader
のインスタンスですか?
だからConsole.In
がTextReader
にネストされたクラスであるタイプSystem.IO.TextReader.SyncTextReader
のある結果が
System.IO.TextReader+SyncTextReader
ある
Console.WriteLine(Console.In.GetType());
を試してみてください。
は唯一プロパティConsole.In
はSyncTextReader
は明らかに由来しTextReader
として宣言されています。
したがって、継承の点では、文「Console.In
はインスタンスはTextReader
」が正しいです。
更新:(Jamiecがコメントしたように)実際にこのSyncTextReader
はStreamReader
の基礎となるインスタンスを有します。これは、タイプ__ConsoleStream
の基本インスタンスで作成されます。
Console.Inの基底クラスがたTextReaderから派生SynctextReaderあります。
Console.WriteLine(Console.In.GetType().FullName);
は私たちに
System.IO.TextReader+SyncTextReader
SyncTextReader
を与えるTextReader
内部に入れ子になったクラスです。これは、非抽象的であるが、内部 はhttps://referencesource.microsoft.com/#mscorlib/system/io/textreader.cs,311
たTextReaderは抽象クラスなので、どのようにインスタンスConsole.Inを持つことができますか?
あなたは本当に意味があると言うとき、私は「私は抽象的なクラス」のインスタンスを持っています。抽象クラスを継承するクラス "と定義されています。インターフェイスと同じですが、実際には「IFooが設定した契約に準拠したクラスのインスタンスを持っています」という意味で、「IFooのインスタンスがあります」ということがあります。
具体的な質問については、disassembly is availableあなたは基本的に正しいことがわかります。実際のタイプはもちろん、TextReader
を継承する具象クラスです。 StreamReader
インスタンスを中心にTextReader.Synchronized
を使用します。
....
tr = TextReader.Synchronized(new StreamReader(s, enc, false,
_DefaultConsoleBufferSize, false));
....
文言の明確な説明のためのUpvote。 (そして、ただ完了する必要があります:その 'StreamReader'の下には、もう一つの' __ConsoleStream'があり、あなたが表示するコンストラクタ呼び出しの 's'があります)。 –
「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
@Jamiecは、私がそれを追跡できるように装飾チェーンで私の答えを更新しました –