Поделиться через


Вызов события

Обновлен: Ноябрь 2007

Функциональные возможности события обеспечивают три взаимосвязанные элемента: класс, предоставляющий данные события, делегат события и класс, вызывающий событие. В среде .NET Framework используется соглашение по присвоению имен классам и методам, относящимся к событиям. Чтобы класс мог вызывать событие с именем EventName, необходимы следующие элементы:

  • Класс, содержащий данные события, именуемый как EventNameEventArgs. Этот класс должен наследоваться от System.EventArgs.

  • Делегат для события, именуемый как EventNameEventHandler.

  • Класс, вызывающий событие. Этот класс должен предоставить объявление события (EventName) и метод, инициирующий событие (OnEventName).

Класс данных события и класс делегата события могут быть уже определены в библиотеке классов .NET Framework или в библиотеке классов независимых разработчиков. В данном случае не требуется определять эти классы. Например, если событие не использует пользовательские данные, то можно использовать System.EventArgs для данных события и System.EventHandler для делегата.

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

private EventNameHandler eh = null;

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

wkzf914z.alert_note(ru-ru,VS.90).gifПримечание.

В языках, отличных от C# и Visual Basic 2005, компилятор может не создавать автоматически код, соответствующий элементу события и, возможно, потребуется вручную явным образом определить обработчики событий и поле закрытого делегата.

После определения реализации события, необходимо определить, когда следует инициировать событие. Событие инициируется вызовом защищенного метода OnEventName в классе, определяющем событие, или в производном классе. Метод OnEventName вызывает событие посредством вызова делегатов, передавая все характерные для события данные. Методы делегата события могут выполнять действия для события или обрабатывать характерные для события данные.

wkzf914z.alert_note(ru-ru,VS.90).gifПримечание.

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

При необходимости обработки событий, вызванных в другом классе, добавьте методы делегата к событию. Если вы не знакомы с моделью делегатов событий в .NET Framework, см. раздел События и делегаты.

См. также

Задачи

Практическое руководство. Вызов и прием событий

Практическое руководство. Реализация событий в классе

Основные понятия

События и делегаты

Другие ресурсы

Обработка и вызов событий