События. Событие — это элемент класса, позволяющий ему посылать другим объектам уведомленияоб изменении своего состояния

Событие — это элемент класса, позволяющий ему посылать другим объектам уведомления об изменении своего состояния. При этом для объектов, являющих-] ся наблюдателями события, активизируются методы-обработчики этого собы­тия. Обработчики должны быть зарегистрированы в объекте-источнике события.! Таким образом, механизм событий формализует на языковом уровне паттерн «наблюдатель», который рассматривался в предыдущем разделе. Механизм событий можно также описать с помощью модели «публикация — под­| писка»: один класс, являющийся отправителем (sender) сообщения, публикует события, которые он может инициировать, а другие классы, являющиеся получа­телями (receivers) сообщения, подписываются на получение этих событий.

События построены на основе делегатов: с помощью делегатов вызываются ме­тоды-обработчики событий. Поэтому создание события в классе состоит из сле­дующих частей:

□ описание делегата, задающего сигнатуру обработчиков событий;

□ описание события;

□ описание метода (методов), инициирующих событие. Синтаксис события похож на синтаксис делегата1: [ атрибуты ] [ спецификаторы ] event тип имя_события

Для событий применяются спецификаторы new, public, protected, internal, private, static, virtual, sealed, override, abstract и extern, которые изучались при рассмот­рении методов классов. Например, так же как и методы, событие может быть ста­тическим (static), тогда оно связано с классом в целом, или обычным — в этом случае оно связано с экземпляром класса.

Тип события — это тип делегата, на котором основано событие. Пример описания делегата и соответствующего ему события:

public delegate void Del(object о); // объявление делегата

class A

{

public event Del Oops; // объявление события

}

Обработка событий выполняется в классах-получателях сообщения. Для этого в них описываются методы-обработчики событий, сигнатура которых соответст­вует типу делегата. Каждый объект (не класс!), желающий получать сообщение, должен зарегистрировать в объекте-отправителе этот метод.

Как видите, это в точности тот же самый механизм, который рассматривался в пре­дыдущем разделе. Единственное отличие состоит в том, что при использовании событий не требуется описывать метод, регистрирующий обработчики, посколь­ку события поддерживают операции += и -=, добавляющие обработчик в список и удаляющие его из списка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: