// Объявить класс, содержащий событие, class MyEvent {
public event MyEventHandler SomeEvent;
// Этот метод вызывается для запуска события, public void OnSomeEvent {
if (SomeEvent != null)
SomeEvent;
}
}
class EventDemo {
// Обработчик события, static void Handler {
Console.WriteLine("Произошло событие");
}
static void Main {
MyEvent evt = new MyEvent ;
// Добавить метод Handler в список событий, evt.SomeEvent += Handler;
// Запустить событие, evt.OnSomeEvent;
}
}
Вот какой результат получается при выполнении этого кода.
Произошло событие
Несмотря на всю свою простоту, данный пример кода содержит все основные элементы, необходимые для обработки событий. Он начинается с объявления типа делегата для обработчика событий, как показано ниже.
delegate void MyEventHandler;
Все события активизируются с помощью делегатов. Поэтому тип делегата события определяет возвращаемый тип и сигнатуру для события. В данном случае параметры события отсутствуют, но их разрешается указывать.
Далее создается класс событияMyEvent.В этом классе объявляется событиеSomeEventв следующей строке кода.
public event MyEventHandler SomeEvent;
Обратите внимание на синтаксис этого объявления. Ключевое словоeventуведомляет компилятор о том, что объявляется событие.
Кроме того, в классеMyEventобъявляется методOnSomeEvent , вызываемый для сигнализации о запуске события. Это означает, что он вызывается, когда происходит событие. В методеOnSomeEvent вызывается обработчик событий с помощью делегатаSomeEvent.
if(SomeEvent != null)
SomeEvent;
Как видите, обработчик вызывается лишь в том случае, если событиеSomeEventне является пустым. А поскольку интерес к событию должен быть зарегистрирован в других частях программы, чтобы получать уведомления о нем, то методOnSomeEvent может быть вызван до регистрации любого обработчика события. Но во избежание
вызова по пустой ссылке делегат события должен быть проверен, чтобы убедиться в том, что он не является пустым.
В классеEvent Demoсоздается обработчик событийHandler . В данном простом примере обработчик событий просто выводит сообщение, но другие обработчики могут выполнять более содержательные функции. Далее в методеMain создается объект класса событияMyEvent,aHandler регистрируется как обработчик этого события, добавляемый в список.
MyEvent evt = new MyEvent ;
// Добавить метод Handler в список событий, evt.SomeEvent += Handler;