Книга: C# 4.0: полное руководство
Применение анонимных методов и лямбда-выражений вместе с событиями
Применение анонимных методов и лямбда-выражений вместе с событиями
Анонимные методы и лямбда-выражения особенно удобны для работы с событиями, поскольку обработчик событий зачастую вызывается только в коде, реализующем механизм обработки событий. Это означает, что создавать автономный метод, как правило, нет никаких причин. А с помощью лямбда-выражений или анонимных методов можно существенно упростить код обработки событий.
Как упоминалось выше, лямбда-выражениям теперь отдается большее предпочтение по сравнению с анонимными методами, поэтому начнем именно с них. Ниже приведен пример программы, в которой лямбда-выражение используется в качестве обработчика событий.
// Использовать лямбда-выражение в качестве обработчика событий,
using System;
// Объявить тип делегата для события,
delegate void MyEventHandler(int n);
// Объявить класс, содержащий событие,
class MyEvent {
public event MyEventHandler SomeEvent;
// Этот метод вызывается для запуска события,
public void OnSomeEvent(int n) {
if(SomeEvent != null)
SomeEvent(n);
}
}
class LambdaEventDemo {
static void Main() {
MyEvent evt = new MyEvent();
// Использовать лямбда-выражение в качестве обработчика событий,
evt.SomeEvent += (n) =>
Console.WriteLine("Событие получено. Значение равно " + n);
// Запустить событие,
evt.OnSomeEvent(1);
evt.OnSomeEvent(2);
}
}
Вот к какому результату приводит выполнение этой программы.
Событие получено. Значение равно 1
Событие получено. Значение равно 2
Обратите особое внимание на то, как в этой программе лямбда-выражение используется в качестве обработчика событий.
evt.SomeEvent += (n) =>
Console.WriteLine("Событие получено. Значение равно " + n);
Синтаксис для использования лямбда-выражения в качестве обработчика событий остается таким же, как для его применения вместе с любым другим типом делегата.
Несмотря на то что при создании анонимной функции предпочтение следует теперь отдавать лямбда-выражениям, в качестве обработчика событий можно по-прежнему использовать анонимный метод. Ниже приведен вариант обработчика событий из предыдущего примера, измененный с целью продемонстрировать применение анонимного метода.
// Использовать анонимный метод в качестве обработчика событий,
evt.SomeEvent += delegate(int n) {
Console.WriteLine("Событие получено. Значение равно " + n);
};
Как видите, синтаксис использования анонимного метода в качестве обработчика событий остается таким же, как и для его применения вместе с любым другим типом делегата.
- ГЛАВА 15 Делегаты, события и лямбда-выражения
- 1.3.3. Достоинства и недостатки анонимных прокси-серверов
- Множественные интерфейсы и имена методов
- 3. Null-значения и общее правило вычисления выражений
- Перегрузка методов с несколькими параметрами типа
- Можно ли сделать так, чтобы вместе с часами отображалась и дата?
- Применение функции scanf( )
- Применение PHP-технологий в программе HtmlPad
- Можно ли копировать права доступа вместе с данными?
- 17.6 Применение агентов новостей для настольных систем
- 2.3. Эмпирическая модель обучения Дэвида Колба и ее применение в практике бизнес-тренинга
- Как использовать технику разговорных выражений