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

Консольный ввод. Преобразование значений

Следует иметь в виду, что чтение информации из входного потока класса Console связано с получением из буфера клавиатуры СИМВОЛЬНЫХ последовательностей и, в большинстве случаев, предполагает дальнейшие преобразования этих последовательностей к соответствующему типу значений.

Консольный ввод предполагает использование уже известных статических(!) функций-членов класса Console

  • Read() - Читает следующий знак из стандартного входного потока.

public static int Read();

Возвращаемое значение:

Следующий знак из входного потока или значение «-1», если знаков больше нет.

Метод не будет завершен до окончания операции чтения, например, при нажатии клавиши “Ввод”. При наличии данных входной поток содержит ввод пользователя и зависящую от окружения последовательность знаков перехода на новую строку.

  • ReadLine() - Считывает следующую строку символов из стандартного входного потока.

public static string ReadLine();

Возвращаемое значение:

Следующая строка из входного потока или пустая ссылка, если знаков больше нет.

Строка определяется как последовательность символов, завершаемая парой escape-символов carriage return line feed (“\r\n”) - (hexadecimal 0x000d), (hexadecimal 0x000a). При этом возвращаемая строка эти символы не включает.

В любом случае речь идёт о получении символьной информации. Символьная информация достаточно просто извлекается из входного потока. Однако это не самая большая составляющая общего объёма обрабатываемой информации. Как правило, содержимое входного потока приходится приводить к одному из базовых типов.

В .NET FCL реализован процесс преобразования информации в рамках Общей Системы Типов (CTS).

.NET Framework Class Library включает класс System.Conwert, в котором реализовано множество функций-членов, предназначенных для выполнения ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ЗНАЧЕНИЙ ОДНОГО базового ТИПА В ЗНАЧЕНИЯ ДРУГОГО базового ТИПА. В частности, в этом классе содержится множество функций (по нескольку функций на каждый базовый тип), обеспечивающих по попытку преобразования символьных строк в значения базовых типов.

Кроме того, множество классов, входящих в CTS и FCL располагают вариантами функции Parse(), основное назначение которой - ПОПЫТКА преобразования строк символов (в частности, получаемых в результате выполнения методов консольного ввода) в значения соответствующих типов.

При обсуждении функций преобразования не случайно употребляется слово “попытка”. Не каждая строка символов может быть преобразована к определённому базовому типу. Для успешного преобразования предполагается, что символьная строка содержит символьное представление значения в некотором общепринятом формате. С аналогичной ситуацией мы уже встречались при обсуждении понятия литералов. В случае успешного преобразования функции возвращают результат преобразования в виде значения соответствующего типа.

Если же значение одного типа не может быть преобразовано к значению другого типа, преобразующая функция ВЫРАБАТЫВАЕТ ИСКЛЮЧЕНИЕ, с помощью которого CLR (то есть, среда выполнения!) уведомляется о неудачной попытке преобразования.