Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
class KbIn {
static void Main() {
char ch;
Console.Write("Нажмите клавишу, а затем — : ");
ch = (char) Console.Read(); // получить значение типа char
Console.WriteLine("Вы нажали клавишу: " + ch) ;
}
}
Вот, например, к какому результату может привести выполнение этой программы.
Нажмите клавишу, а затем — : t
Вы нажали клавишу: t
Необходимость буферизировать построчно ввод, осуществляемый с консоли посредством метода Read()
, иногда может быть досадным препятствием. Ведь при нажатии клавиши в поток ввода передается последовательность символов перевода каретки и перевода строки. Более того, эти символы остаются во входном буфере до тех пор, пока они не будут считаны. Следовательно, в некоторых приложениях приходится удалять эти символы (путем их считывания), прежде чем приступать к следующей операции ввода. Впрочем, для чтения введенных с клавиатуры символов без построчной буферизации, можно воспользоваться рассматриваемым далее методом ReadKey()
. Для считывания строки символов служит приведенный ниже метод ReadLine()
.
static string ReadLine()
Символы считываются методом ReadLine()
до тех пор, пока пользователь не нажмет клавишу , а затем этот метод возвращает введенные символы в виде объекта типа string
. Кроме того, он сгенерирует исключение IOException
при неудачном исходе операции ввода.
Ниже приведен пример программы, в которой демонстрируется чтение строки из потока Console.In
с помощью метода ReadLine()
.
// Ввод с консоли с помощью метода ReadLine().
using System;
class ReadString {
static void Main() {
string str;
Console.WriteLine("Введите несколько символов.");
str = Console.ReadLine();
Console.WriteLine("Вы ввели: " + str);
}
}
Выполнение этой программы может привести, например, к следующему результату.
Введите несколько символов.
Это просто тест.
Вы ввели: Это просто тест.
Итак, для чтения данных из потока Console.In
проще всего воспользоваться методами класса Console
. Но для этой цели можно обратиться и к методам базового класса TextReader
. В качестве примера ниже приведен переделанный вариант предыдущего примера программы, в котором используется метод ReadLine()
, определенный в классе TextReader
.
// Прочитать введенную с клавиатуры строку
// непосредственно из потока Console.In.
using System;
class ReadChars2 {
static void Main() {
string str;
Console.WriteLine("Введите несколько символов.");
str = Console.In.ReadLine(); // вызвать метод ReadLine()
// класса TextReader
Console.WriteLine("Вы ввели: " + str);
}
}
Обратите внимание на то, что метод ReadLine()
теперь вызывается непосредственно для потока Console.In
. Поэтому если требуется доступ к методам, определенным в классе TextReader
, который является базовым для потока Console.In
, то подобные методы вызываются так, как было показано в приведенном выше примере.
В состав среды .NET Framework включен метод, определяемый в классе Console
и позволяющий непосредственно считывать отдельно введенные с клавиатуры символы без построчной буферизации. Этот метод называется ReadKey()
. При нажатии клавиши метод ReadKey()
немедленно возвращает введенный с клавиатуры символ. И в этом случае пользователю уже не нужно нажимать дополнительно клавишу . Таким образом, метод ReadKey()
позволяет считывать и обрабатывать ввод с клавиатуры в реальном масштабе времени.
Ниже приведены две формы объявления метода ReadKey()
.
static ConsoleKeylnfo ReadKey()
static ConsoleKeylnfo ReadKey(bool intercept)
В первой форме данного метода ожидается нажатие клавиши. Когда оно происходит, метод возвращает введенный с клавиатуры символ и выводит его на экран. Во второй форме также ожидается нажатие клавиши, и затем возвращается введенный с клавиатуры символ. Но если значение параметра intercept
равно true
, то введенный символ не отображается. А если значение параметра intercept равно false
, то введенный символ отображается.
Метод ReadKey()
возвращает информацию о нажатии клавиши в объекте типа ConsoleKeylnfo
, который представляет собой структуру, состоящую из приведенных ниже свойств, доступных только для чтения.
char KeyChar
ConsoleKey Key
ConsoleModifiers Modifiers
Свойство KeyChar
содержит эквивалент char
введенного с клавиатуры символа, свойство Key
— значение из перечисления ConsoleKey
всех клавиш на клавиатуре, а свойство Modifiers
— описание одной из модифицирующих клавиш (, или ), которые были нажаты, если это действительно имело место, при формировании ввода с клавиатуры. Эти модифицирующие клавиши представлены в перечислении ConsoleModifiers
следующими значениями: Control, Shift
и Alt
. В свойстве Modifiers
может присутствовать несколько значений нажатых модифицирующих клавиш.
Главное преимущество метода ReadKey()
заключается в том, что он предоставляет средства для организации ввода с клавиатуры в диалоговом режиме, поскольку этот ввод не буферизуется построчно. Для того чтобы продемонстрировать данный метод в действии, ниже приведен соответствующий пример программы.
// Считать символы, введенные с консоли, используя метод ReadKey().
using System;
class ReadKeys {
static void Main() {
ConsoleKeyInfo keypress;
Console.WriteLine("Введите несколько символов, " +
"а по окончании -
.");
do {
keypress = Console.ReadKey(); // считать данные о нажатых клавишах
Console.WriteLine(" Вы нажали клавишу: " + keypress.KeyChar);
// Проверить нажатие модифицирующих клавиш.
if((ConsoleModifiers.Alt & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша .");
if((ConsoleModifiers.Control & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша .");
if((ConsoleModifiers.Shift & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша .");
} while(keypress.KeyChar != 'Q');
}
}
Вот, например, к какому результату может привести выполнение этой программы.
Интервал:
Закладка: