TextReader is an abstract class, so how can it have an instance Console.In?
You're logically correct, but its (I would say) generally understood that when you say "I have an instance of [an abstract class]" what you really mean is "I have an instance of a concrete class which inherits an abstract class". It's the same with interfaces, you might say "I have an instance of IFoo" where you actually mean "I have an instance of a class which conforms to the contract set out by IFoo".
For your specific question, the disassembly is available And you can see that you're basically right. The actual type is of course a concrete class which inherits TextReader
. It uses TextReader.Synchronized
around a StreamReader
instance.
....
tr = TextReader.Synchronized(new StreamReader(s, enc, false,
_DefaultConsoleBufferSize, false));
....