Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Стандартные потоки Console.In и Console.Out


Автор: Luckylad 12.1.2007, 23:08
Друзья,

объясните мне пожалуйста, если можете, каким образом стандартные потоки Console.In, Console.Out, Console.Error могут быть объектами абстрактных классов TextReader и TextWriter соответственно?

Ведь мы же не можем создать экземпляр абстрактного класса?

Цитата из "Полный справочник по C#" Герберт Шилдт :
"Чтобы создать символьный поток, поместите байтовый поток в одну из символьных потоковых C#-оболочек. В вершине иерархии символьных потоков находятся абстрактные классы TextReader и TextWriter.   ...(дальше)... Поток Console.In - экземпляр класса TextReader.     ...(дальше)...   Потоки Console.Out и Console.Error - объекты типа TextWriter."

Может я чего-то не понимаю? В чем тут дело?

Автор: archimed7592 12.1.2007, 23:17
пример:
Код
StreamWriter sw = new StreamWriter (...);
TextWriter tw = sw;
теперь "tw объект абстрактного класса TextWriter"...хотя, на самом деле это не так...с консолью тож самое.

Автор: ivashkanet 13.1.2007, 12:02
Посмотрев под дебагером, увидел, что Console.Out имеет тип SyncTextWriter
Получить его можно так: 
Код
            TextWriter sw = new StreamWriter(@"C:\English.chm");
            TextWriter ssw = TextWriter.Synchronized(sw);

Походу, это потокобезопасная обертка к TextWriter

Luckylad, срочно читать про наследование и приведение типов  smile 

Автор: Luckylad 13.1.2007, 14:50
О приведенном выше приведении типов я знаю и сам ни раз использовал.
Видимо я не правильно понял Шилдта - мне подумалось, что стандартные потоки являются непосредственно созданными экземплярами класса TextReader/TextWriter, то есть 
Код

TextReader tr = new TextReader();


вот поэтому вопрос и возник


Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)