Некоторые события могут активизировать несколько процедур обработки, в том числе определенных в других объектах. Такие события называются широковещательными. Реализация механизма широковещательных событий в языке программирования C# основана на использовании многоадресных делегатов.
Пример управления событиями посредством делегата:
// Объявление делегата, на основе которого // будет определено событие. delegate void MyEventHandler () ;
// Объявление класса, в котором // инициируется событие. class MyEvent { public event MyEventHandler activate; // В этом методе инициируется событие.
public void fire() { if (activate != null) activate(); } }
class X { public void Xhandler() { Console.WriteLine("Событие получено объектом класса X."); } }
class Y { public void Yhandler() { Console.WriteLine("Событие получено объектом класса Y."); } }
class EventDemo { static void handler() { Console.WriteLine("Событие получено объектом класса EventDemo.") }
public static void Main() { MyEvent evt = new MyEvent(); X xOb = new X(); Y yOb = new Y();
// Добавление методов handler (), XhandlerО // и YhandlerO в цепочку обработчиков события. evt.activate += new MyEventHandler(handler); evt.activate += new MyEventHandler(xOb.Xhandler); evt.activate += new MyEventHandler(yOb.Yhandler); evt.fire(); Console.WriteLine(); evt.activate -= new MyEventHandler(xOb.Xhandler); evt.fire(); } }