Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка для КР по ООП.doc
Скачиваний:
8
Добавлен:
18.04.2019
Размер:
2.47 Mб
Скачать

Консольный ввод-вывод. Функции-члены класса Console

При обсуждении процедур ввода-вывода следует иметь в виду одно важное обстоятельство. Независимо от типа выводимого значения, в конечном результате выводится, СИМВОЛЬНОЕ ПРЕДСТАВЛЕНИЕ значения. Это становится очевидным при выводе информации в окно представления, что и обеспечивают по умолчанию методы Console.Write и Console.WriteLine.

WriteLine отличается тем, что завершает свою работу обязательным выводом Escape-последовательности line feed/carriage return.

Console.WriteLine(“The Captain is on the board!”); // Вывод строки.

Console.WriteLine(314); // Вывод символьного представления целочисленного значения.

Console.WriteLine(3.14); // Вывод символьного представления значения типа float.

Выводимая символьная строка может содержать Escape-последовательности, которые при выводе информации в окно представления позволяют создавать различные “специальные эффекты”.

Методы с одним параметром достаточно просты. Практически всё происходит само собой. Уже на стадии компиляции при выяснении типа выводимого значения подбирается соответствующий вариант перегруженной функции вывода. становится При выводе значения определяется его тип, производится соответствующее стандартное преобразование к символьному виду, которое в виде последовательности символов и выводится в окно представления.

Для облегчения процесса программирования ввода-вывода в C# также используются варианты функций Write и WriteLine с несколькими параметрами.

Эти методы называются ПЕРЕГРУЖАЕМЫМИ (смотреть перегрузку методов). Для программиста C# это означает возможность вызова этих функций с различными параметрами. Можно предположить, что различным вариантам списков параметров функции могут соответствовать различные варианты функций вывода.

Ниже представлен вариант метода WriteLine с тремя параметрами. Во всех случаях, когда количество параметров превышает 1, первый параметр обязан быть символьной строкой.

Console.WriteLine(“qwerty”,314,3.14);

Чтобы понять, как выполняется такой оператор, следует иметь в виду, что всякий параметр метода является выражением определённого типа, которое в процессе выполнения метода может вычисляться для определения значения соответствующего выражения. Таким образом, при выполнении метода WriteLine должны быть определены значения его параметров, после чего в окне приложения должна появиться определённая последовательность символов. Ниже представлен результат выполнения выражения вызова функции:

qwerty

Значения второго и третьего параметров не выводятся.

Дело в том, что первый строковый параметр выражений вызова функций Write и WriteLine используется как управляющий шаблон для представления выводимой информации. Значения следующих за строковым параметром выражений будут выводиться в окно представления лишь в том случае, если первый параметр-строка будет явно указывать места расположения выводимых значений, соответствующих этим параметрам. Явное указание обеспечивается маркерами выводимых значений, которые в самом простом случае представляют собой заключённые в фигурные скобки целочисленные литералы (например, {3}).

При этом способ указания места состоит в следующем:

  • CLR индексирует все параметры метода WriteLine, следующие за первым параметром-строкой. При этом второй по порядку параметр получает индекс 0, следующий за ним – 1, и т.д. до конца списка параметров.

  • В произвольных местах параметра-шаблона размещаются маркеры выводимых значений.

  • Значение маркера должно соответствовать индексу параметра, значение которого должно выводиться на экран.

  • Значение целочисленного литерала маркера не должно превышать максимального значения индекса параметра.

Таким образом, оператор

Console.WriteLine(“The sum of {0} and {1} is {2}”,314,3.14,314+3.14);

обеспечивает вывод следующей строки:

The sum of 314 and 3.14 is 317.3

В последнем операнде выражения вызова WriteLine при вычислении значения выражения используется неявное приведение типа. При вычислении значения суммы операнд типа int без потери значения приводится к типу float. Безопасные преобразования типов проводятся автоматически.

Несмотря на явную абсурдность выводимых утверждений, операторы

Console.WriteLine(“The sum of {0} and {1} is {0}”,314,3.14,314+3.14);

Console.WriteLine(“The sum of {2} and {1} is {0}”,314,3.14,314+3.14);

также отработают вполне корректно.