С другой стороны, когда в качестве обработчика событий используется статический метод, события обрабатываются независимо от какого-либо объекта, как демонстриру ется в приведенном ниже примере программы. /* Уведомления о событии получает класс, когда статический метод используется в качестве обработчика событий. */ using System; // Объявить тип делегата для события. delegate void MyEventHandler; // Объявить класс, содержащий событие. class MyEvent { public event MyEventHandler SomeEvent; // Этот метод вызывается для запуска события. public void OnSomeEvent { if(SomeEvent != null) SomeEvent; } } class X { /* Этот статический метод предназначен в качестве обработчика событий. */ public static void Xhandler { Console.WriteLine("Событие получено классом."); } } class EventDemo4 { static void Main { MyEvent evt = new MyEvent; evt.SomeEvent += X.Xhandler; // Запустить событие. evt.OnSomeEvent; } }
При выполнение кода этого примера получается следующий результат. Событие получено классом.
Обратите в данном примере внимание на то, что объекты класса X вообще не создаются. Но поскольку Xhandler является статическим методом класса X, то он может быть привязан к событию SomeEvent и выполнен при вызове метода OnSomeEvent. Применение аксессоров событий
В приведенных выше примерах события формировались в форме, допускавшей ав томатическое управление списком вызовов обработчиков событий, включая добавле ние и удаление обработчиков событий из списка. Поэтому управление этим списком не нужно было организовывать вручную. Благодаря именно этому свойству такие со бытия используются чаще всего. Тем не менее организовать управление списком вы зовов обработчиков событий можно и вручную, чтобы, например, реализовать специ альный механизм сохранения событий.
Для управления списком обработчиков событий служит расширенная форма опе ратора event, позволяющая использовать аксессоры событий. Эти аксессоры предо ставляют средства для управления реализацией подобного списка в приведенной ниже форме. event делегат_события имя_события { add { // Код добавления события в цепочку событий. } remove { // Код удаления события из цепочки событий. } }
В эту форму входят два аксессора событий: add и remove. Аксессор add вызывается, когда обработчик событий добавляется в цепочку событий с помощью оператора +=. В то же время аксессор remove вызывается, когда обработчик событий удаляется из цепочки событий с помощью оператора -=.
Когда вызывается аксессор add или remove, он принимает в качестве параметра добавляемый или удаляемый обработчик. Как и в других разновидностях аксессоров, этот неявный параметр называется value. Реализовав аксессоры add или remove, можно организовать специальную схему хранения обработчиков событий. Например, обработчики событий можно хранить в массиве, стеке или очереди.