Российский Государственный Технологический Университет им. К.Э. Циолковского
Опубликован: 02.03.2007 | Доступ: свободный | Студентов: 5636 / 790 | Оценка: 3.96 / 3.45 | Длительность: 27:04:00
ISBN: 978-5-9556-0086-4
Лекция 11:

Ввод/вывод

Предопределенные потоки ввода/вывода

Предопределенные потоки ввода/вывода используются для реализации ввода/вывода в рамках консольных приложений. Это еще одна категория потоков.

В классах предопределенных потоков, в отличие от ранее рассмотренных потоков, явным образом задаются источник (откуда) и место размещения (куда) информации.

Основные свойства и методы этих потоков определены в классе System.Console. Класс Console является достаточно сложной конструкцией.

В рамках этого класса определены свойства, обеспечивающие доступ к предопределенным потокам. В классе System.Console таких потоков три ( In, Out, Error ).

Ниже описываются свойства этих потоков:

  • Standard input stream – является объектом – представителем класса TextReader. По умолчанию поток In ориентирован на получение информации с клавиатуры.
  • Standard output stream – является объектом – представителем класса TextWriter. По умолчанию обеспечивает вывод информации на дисплей.
  • Standard error stream – также является объектом – представителем класса TextWriter. И также по умолчанию выводит информацию на дисплей.

В классе System.Console также определены следующие СТАТИЧЕСКИЕ (!) функции – члены (вернее, множества СТАТИЧЕСКИХ ПЕРЕГРУЖЕННЫХ функций), обеспечивающие процедуры ввода/вывода:

  • Write и WriteLine ;
  • Read и ReadLine.

При этом функции-члены класса Console ПО УМОЛЧАНИЮ обеспечивают связь с конкретным потоком. Например, при вызове метода

Console.WriteLine(...); // Список параметров опущен

информация направляется в поток, который представляется определенным в классе статическим свойством Console.Out. Это свойство предоставляет доступ к объекту – представителю класса TextWriter. Таким образом, класс Console также обеспечивает вызов соответствующей функции-члена от имени объекта – представителя класса TextWriter. Непосредственное обращение к члену класса Console (то есть к потоку), отвечающего за текстовый вывод, имеет следующую форму вызова:

Console.Out.WriteLine(...);

Вызов определенного в классе Console метода ReadLine

Console.ReadLine(...);

обеспечивает получение информации через поток, доступ к которому предоставляется статическим свойством Console.In. Непосредственный вызов аналогичной функции от имени члена класса TextReader выглядит следующим образом:

Console.In.ReadLine(...);

Функция – представитель класса Console, отвечающая за непосредственное направление информации в поток вывода сообщений об ошибках, не предусмотрена.

Вывод информации об ошибках может быть реализован путем непосредственного обращения к standard error output stream:

Console.Error.WriteLine(...);

Если вспомнить, что свойство Error возвращает ссылку на объект – представитель класса TextWriter и, так же как и свойство Out, обеспечивает вывод в окно консольного приложения, разделение сообщений, связанных с нормальным ходом выполнения приложения и сообщений об ошибках, становится более чем странным.

Информация, выводимая приложением в "штатном" режиме, и сообщения об ошибках одинаково направляются в окно приложения на экран консоли. Однако в классе Console реализована возможность перенаправления соответствующих потоков. Например, стандартный поток вывода можно перенаправить в файл, а поток сообщений об ошибках оставить без изменений — направленным в окно приложения. Результат перенаправления очевиден.

Процедуры перенаправления потоков осуществляются с помощью методов void SetIn(TextReader in), void SetOut(TextWriter out), void SetErr(TextWriter err) и будут рассмотрены ниже.

kewezok kewezok
kewezok kewezok
Елена Шляхт
Елена Шляхт
Объясните плиз в чем отличие а++ от ++а
Почему результат разный?
int a=0, b=0;
Console.WriteLine(a++); //0
Console.WriteLine(++b); //1
a++;
++b;
Console.WriteLine(a); //2
Console.WriteLine(b); //2