Книга: 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);
};

Как видите, синтаксис использования анонимного метода в качестве обработчика событий остается таким же, как и для его применения вместе с любым другим типом делегата.

Оглавление книги


Генерация: 1.209. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз