Добавить в цитаты Настройки чтения

Страница 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(&quot;Добавление событий.&quot;); </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(&quot;Удаление обработчика xOb.Xhandler.&quot;); </b>

<b>    evt.SomeEvent -= xOb.Xhandler; </b>

<b>    evt.OnSomeEvent(); </b>

<b>    Console.WriteLine(); </b>

<b>    // Попробовать удалить обработчик еще раз. </b>

<b>    Console.WriteLine(&quot;Попытка удалить обработчик &quot; + </b>

<b>           &quot;xOb.Xhandler еще раз.&quot;); </b>

<b>    evt.SomeEvent -= xOb.Xhandler; </b>

<b>    evt.OnSomeEvent(); </b>

<b>    Console.WriteLine(); </b>

<b>    //А теперь добавить обработчик Zhandler. </b>

<b>    Console.WriteLine(&quot;Добавление обработчика zOb.Zhandler.&quot;); </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 &lt; 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(&quot;Список событий заполнен.&quot;);</b>

<b>  }</b>

<b>  // Удалить событие из списка,</b>

<b>  remove {</b>

<b>    int i;</b>

<b>    for(i=0; i &lt; 3; i++)</b>

<b>      if(evnt[i] == value) {</b>