Вызов события
Обновлен: Ноябрь 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. Эти подробности скрыты от программиста.
Примечание. |
---|
В языках, отличных от C# и Visual Basic 2005, компилятор может не создавать автоматически код, соответствующий элементу события и, возможно, потребуется вручную явным образом определить обработчики событий и поле закрытого делегата. |
После определения реализации события, необходимо определить, когда следует инициировать событие. Событие инициируется вызовом защищенного метода OnEventName в классе, определяющем событие, или в производном классе. Метод OnEventName вызывает событие посредством вызова делегатов, передавая все характерные для события данные. Методы делегата события могут выполнять действия для события или обрабатывать характерные для события данные.
Примечание. |
---|
Защищенный метод OnEventName также позволяет производным классам переопределять событие без прикрепления к нему делегата. Производный класс должен всегда вызывать метод OnEventName базового класса, чтобы гарантировать получение события зарегистрированными делегатами. |
При необходимости обработки событий, вызванных в другом классе, добавьте методы делегата к событию. Если вы не знакомы с моделью делегатов событий в .NET Framework, см. раздел События и делегаты.
См. также
Задачи
Практическое руководство. Вызов и прием событий
Практическое руководство. Реализация событий в классе