Страница 235 из 502
<b>class EventDemo5 { </b>
<b> static void Main() { </b>
<b> MyEvent evt = new MyEvent(); </b>
<b> W wOb = new W(); </b>
<b> X xOb = new X(); </b>
<b> Y yOb = new Y(); </b>
<b> Z zOb = new Z(); </b>
<b> // Добавить обработчики в цепочку событий. </b>
<b> Console.WriteLine("Добавление событий."); </b>
<b> evt.SomeEvent += wOb.Whandler; </b>
<b> evt.SomeEvent += xOb.Xhandler; </b>
<b> evt.SomeEvent += yOb.Yhandler; </b>
<b> // Сохранить нельзя - список заполнен, </b>
<b> evt.SomeEvent += zOb.Zhandler; </b>
<b> Console.WriteLine(); </b>
<b> // Запустить события, </b>
<b> evt.OnSomeEvent(); </b>
<b> Console.WriteLine(); </b>
<b> // Удалить обработчик. </b>
<b> Console.WriteLine("Удаление обработчика xOb.Xhandler."); </b>
<b> evt.SomeEvent -= xOb.Xhandler; </b>
<b> evt.OnSomeEvent(); </b>
<b> Console.WriteLine(); </b>
<b> // Попробовать удалить обработчик еще раз. </b>
<b> Console.WriteLine("Попытка удалить обработчик " + </b>
<b> "xOb.Xhandler еще раз."); </b>
<b> evt.SomeEvent -= xOb.Xhandler; </b>
<b> evt.OnSomeEvent(); </b>
<b> Console.WriteLine(); </b>
<b> //А теперь добавить обработчик Zhandler. </b>
<b> Console.WriteLine("Добавление обработчика zOb.Zhandler."); </b>
<b> evt.SomeEvent += zOb.Zhandler; </b>
<b> evt.OnSomeEvent(); </b>
<b> } </b>
<b>} </b>
Ниже приведен результат выполнения этой программы
<b>Добавление событий.</b>
<b>Список событий заполнен.</b>
<b>Событие получено объектом W </b>
<b>Событие получено объектом X </b>
<b>Событие получено объектом Y</b>
<b>Удаление обработчика xOb.Xhandler.</b>
<b>Событие получено объектом W</b>
<b>Событие получено объектом Y</b>
<b>Попытка удалить обработчик xOb.Xhandler еще раз.</b>
<b>Обработчик событий не найден.</b>
<b>Событие получено объектом W</b>
<b>Событие получено объектом Y</b>
<b>Добавление обработчика zOb.Zhandler.</b>
<b>Событие получено объектом W</b>
<b>Событие получено объектом X</b>
<b>Событие получено объектом Y</b>
Рассмотрим данную программу более подробно. Сначала в ней определяется делегат обработчиков событий MyEventHandler. Затем объявляется класс MyEvent. В самом его начале определяется массив обработчиков событий evnt, состоящий из трех элементов.
<b>MyEventHandler[] evnt = new MyEventHandler[3];</b>
Этот массив служит для хранения обработчиков событий, добавляемых в цепочку событий. По умолчанию элементы массива evnt инициализируются пустым значением (null).
Далее объявляется событие SomeEvent. В этом объявлении используется приведенная ниже аксессорная форма оператора event.
<b>public event MyEventHandler SomeEvent {</b>
<b> // Добавить событие в список,</b>
<b> add {</b>
<b> int i;</b>
<b> for(i=0; i < 3; i++)</b>
<b> if(evnt[i] == null) {</b>
<b> evnt[i] = value;</b>
<b> break;</b>
<b> }</b>
<b> if (i == 3) Console.WriteLine("Список событий заполнен.");</b>
<b> }</b>
<b> // Удалить событие из списка,</b>
<b> remove {</b>
<b> int i;</b>
<b> for(i=0; i < 3; i++)</b>
<b> if(evnt[i] == value) {</b>