// Использовать лямбда-выражение для отображения факта нажатия клавиши, kevt.KeyPress += (sender, е) =>
Console.WriteLine(" Получено сообщение о нажатии клавиши: " + e.ch);
// Использовать лямбда-выражение для подсчета нажатых клавиш.
kevt.KeyPress += (sender, е) =>
count++; // count — это внешняя переменная
Console.WriteLine("Введите несколько символов. " +
"По завершении введите точку.");
do {
key = Console.ReadKey; kevt.OnKeyPress(key.KeyChar);
} while(key.KeyChar != '.');
Console.WriteLine("Было нажато " + count + " клавиш.");
}
}
Вот, например, к какому результату приводит выполнение этой программы.
Было нажато 5 клавиш.
В самом начале этой программы объявляется классKeyEventArgs,производный от классаEventArgsи служащий для передачи сообщения о нажатии клавиши обработчику событий. Затем объявляется обобщенный делегатEventHandler,определяющий обработчик событий, связанных с нажатием клавиш. Эти события инкапсулируются в классеKeyEvent,где определяется событиеKeyPress.
В методеMain сначала создается объектkevtклассаKeyEvent.Затем в цепочку событийkevt. KeyPressдобавляется обработчик, предоставляемый лямбда-выражением. В этом обработчике отображается факт каждого нажатия клавиши, как показано ниже.
kevt.KeyPress += (sender, е) =>
Console.WriteLine(" Получено сообщение о нажатии клавиши: " + e.ch);
Далее в цепочку событийkevt .KeyPressдобавляется еще один обработчик, предоставляемый лямбда-выражением. В этом обработчике подсчитывается количество нажатых клавиш, как показано ниже.
kevt.KeyPress += (sender, е) =>
count++; // count — это внешняя переменная
Обратите внимание на то, чтоcountявляется локальной переменной, объявленной в методеMain и инициализированной нулевым значением.
Далее начинает выполняться цикл, в котором методkevt. OnKeyPress вызывается при нажатии клавиши. Об этом событии уведомляются все зарегистрированные обработчики событий. По окончании цикла отображается количество нажатых клавиш. Несмотря на всю свою простоту, данный пример наглядно демонстрирует саму суть обработки событий средствами С#. Аналогичный подход может быть использован и для обработки других событий. Безусловно, в некоторых случаях анонимные обработчики событий могут оказаться непригодными, и тогда придется внедрить именованные методы.
ГЛАВА 16 Пространства имен, препроцессор и сборки
Вэтой главе речь пойдет о трех средствах С#, позволяющих улучшить организованность и доступность программы. Этими средствами являются пространства имен, препроцессор и сборки.
Пространства имен