Обратите внимание на то, что обработчик добавляется в список с помощью оператора +=. События поддерживают только операторы += и -=. В данном случае методHandler является статическим, но в качестве обработчиков событий могут также служить методы экземпляра.
И наконец, событие запускается, как показано ниже.
// Запустить событие, evt.OnSomeEvent;
Вызов методаOnSomeEvent приводит к вызову всех событий, зарегистрированных обработчиком. В данном случае зарегистрирован только один такой обработчик, но их может быть больше, как поясняется в следующем разделе.
Пример групповой адресации события
Как и делегаты, события поддерживают групповую адресацию. Это дает возможность нескольким объектам реагировать на уведомление о событии. Ниже приведен пример групповой адресации события.
// Продемонстрировать групповую адресацию события, using System;
// Объявить тип делегата для события, delegate void MyEventHandler ;
// Объявить делегат, содержащий событие, class MyEvent {
public event MyEventHandler SomeEvent;
// Этот метод вызывается для запуска события, public void OnSomeEvent {
if(SomeEvent != null)
SomeEvent;
}
}
class X {
public void XhandlerO {
Console.WriteLine("Событие получено объектом класса X");
}
class Y {
public void YhandlerO {
Console.WriteLine("Событие получено объектом класса Y");
}
}
class EventDemo2 {
static void Handler {
Console.WriteLine("Событие получено объектом класса EventDemo");
}
static void Main {
MyEvent evt = new MyEvent ;
X xOb = new X;
Y yOb = new Y;
// Добавить обработчики в список событий.
evt.SomeEvent += Handler;
evt.SomeEvent += xOb.Xhandler;
evt.SomeEvent += yOb.Yhandler;
// Запустить событие, evt.OnSomeEvent ;
Console.WriteLine ;
// Удалить обработчик.
evt.SomeEvent -= xOb.Xhandler;
evt.OnSomeEvent ;
}
}
При выполнении кода этого примера получается следующий результат.
Событие получено объектом класса EventDemo Событие получено объектом класса X Событие получено объектом класса Y
Событие получено объектом класса EventDemo Событие получено объектом класса Y