Добавить в цитаты Настройки чтения

Страница 202 из 502

<b>static string ReadLine()</b>

Символы считываются методом ReadLine() до тех пор, пока пользователь не нажмет клавишу <Enter>, а затем этот метод возвращает введенные символы в виде объекта типа string. Кроме того, он сгенерирует исключение IOException при неудачном исходе операции ввода.

Ниже приведен пример программы, в которой демонстрируется чтение строки из потока Console.In с помощью метода ReadLine().

<b>// Ввод с консоли с помощью метода ReadLine().</b>

<b>using System;</b>

<b>class ReadString {</b>

<b>  static void Main() {</b>

<b>    string str;</b>

<b>    Console.WriteLine(&quot;Введите несколько символов.&quot;); </b>

<b>    str = Console.ReadLine();</b>

<b>    Console.WriteLine(&quot;Вы ввели: &quot; + str);</b>

<b>  }</b>

<b>}</b>

Выполнение этой программы может привести, например, к следующему результату.

<b>Введите несколько символов.</b>

<b>Это просто тест.</b>

<b>Вы ввели: Это просто тест.</b>

Итак, для чтения данных из потока Console.In проще всего воспользоваться методами класса Console. Но для этой цели можно обратиться и к методам базового класса TextReader. В качестве примера ниже приведен переделанный вариант предыдущего примера программы, в котором используется метод ReadLine(), определенный в классе TextReader.

<b>// Прочитать введенную с клавиатуры строку </b>

<b>// непосредственно из потока Console.In.</b>

<b>using System;</b>

<b>class ReadChars2 {</b>

<b>  static void Main() {</b>

<b>    string str;</b>

<b>    Console.WriteLine(&quot;Введите несколько символов.&quot;);</b>

<b>    str = Console.In.ReadLine(); // вызвать метод ReadLine()</b>

<b>          // класса TextReader </b>

<b>    Console.WriteLine(&quot;Вы ввели: &quot; + str);</b>

<b>  }</b>

<b>}</b>

Обратите внимание на то, что метод ReadLine() теперь вызывается непосредственно для потока Console.In. Поэтому если требуется доступ к методам, определенным в классе TextReader, который является базовым для потока Console.In, то подобные методы вызываются так, как было показано в приведенном выше примере.

В состав среды .NET Framework включен метод, определяемый в классе Console и позволяющий непосредственно считывать отдельно введенные с клавиатуры символы без построчной буферизации. Этот метод называется ReadKey(). При нажатии клавиши метод ReadKey() немедленно возвращает введенный с клавиатуры символ. И в этом случае пользователю уже не нужно нажимать дополнительно клавишу <Enter>. Таким образом, метод ReadKey() позволяет считывать и обрабатывать ввод с клавиатуры в реальном масштабе времени.

Ниже приведены две формы объявления метода ReadKey().

<b>static ConsoleKeylnfo ReadKey()</b>

<b>static ConsoleKeylnfo ReadKey(bool intercept)</b>

В первой форме данного метода ожидается нажатие клавиши. Когда оно происходит, метод возвращает введенный с клавиатуры символ и выводит его на экран. Во второй форме также ожидается нажатие клавиши, и затем возвращается введенный с клавиатуры символ. Но если значение параметра intercept равно true, то введенный символ не отображается. А если значение параметра intercept равно false, то введенный символ отображается.

Метод ReadKey() возвращает информацию о нажатии клавиши в объекте типа ConsoleKeylnfo, который представляет собой структуру, состоящую из приведенных ниже свойств, доступных только для чтения.

<b>char KeyChar </b>

<b>ConsoleKey Key </b>

<b>ConsoleModifiers Modifiers</b>

Свойство KeyChar содержит эквивалент char введенного с клавиатуры символа, свойство Key — значение из перечисления ConsoleKey всех клавиш на клавиатуре, а свойство Modifiers — описание одной из модифицирующих клавиш (<Alt>, <Ctrl> или <Shift>), которые были нажаты, если это действительно имело место, при формировании ввода с клавиатуры. Эти модифицирующие клавиши представлены в перечислении ConsoleModifiers следующими значениями: Control, Shift и Alt. В свойстве Modifiers может присутствовать несколько значений нажатых модифицирующих клавиш.

Главное преимущество метода ReadKey() заключается в том, что он предоставляет средства для организации ввода с клавиатуры в диалоговом режиме, поскольку этот ввод не буферизуется построчно. Для того чтобы продемонстрировать данный метод в действии, ниже приведен соответствующий пример программы.