}
class X {
public void Handler(object source, MyEventArgs arg) { Console.WriteLine("Событие " + arg.EventNum +
" получено объектом класса X."); Console.WriteLine("Источник: " + source);
Console.WriteLine();
}
}
class Y {
public void Handler(object source, MyEventArgs arg) { Console.WriteLine("Событие " + arg.EventNum +
" получено объектом класса Y."); Console.WriteLine("Источник: " + source);
Console.WriteLine() ;
}
}
class EventDemo6 { static void Main() {
X obi = new X ();
Y ob2 = new Y ();
MyEvent evt - new* MyEvent ();
// Добавить обработчик Handler() в цепочку событий, evt ..SomeEvent += obi. Handler; evt.SomeEvent += ob2.Handler;
// Запустить событие, evt.OnSomeEvent(); evt.OnSomeEvent();
}
}
Ниже приведен результат выполнения этой программы.
Событие 0 получено объектом класса X Источник: MyEvent
Событие 0 получено объектом класса Y Источник: MyEvent
Событие 1 получено объектом класса X Источник: MyEvent
Событие 1 получено объектом класса Y Источник: MyEvent
В данном примере создается классMyEventArgs,производный от классаEventArgs.В классеMyEventArgsдобавляется лишь одно его собственное поле:EventNum.Затем объявляется делегатMyEventHandler,принимающий два параметра, требующиеся для среды .NET Framework. Как пояснялось выше, первый параметр содержит ссылку на объект, формирующий событие, а второй параметр — ссылку на объект классаEventArgsили производного от него класса. Обработчики событийHandler (), определяемые в классахXиY,принимают параметры тех же самых типов.
В классеMyEventобъявляется событиеSomeEventтипаMyEventHandler.Это событие запускается в методеOnSomeEvent() с помощью делегатаSomeEvent,которому в качестве первого аргумента передается ссылкаthis,а вторым аргументом служит экземпляр объекта типаMyEventArgs.Таким образом, делегату типаMyEventHandlerпередаются надлежащие аргументы в соответствии с требованиями совместимости со средой .NET.
Применение делегатов EventHandler
В приведенном выше примере программы объявлялся собственный делегат события. Но как правило, в этом не никакой необходимости, поскольку в среде .NET Framework предоставляется встроенный обобщенный делегат под названиемEventHandler
public event EventHandler