В библиотеке .NETимеется большое количество стандартных делегатов, предназначенных для реализации обработки событий. Большинство из таких классов оформлено так:
- Имя делегата заканчитвается EventHandler
- Делегат получает 2 параметра – источник события (тип object), аргументы события (типEventArgs)
Если обработчикам события требуется специфическая информация о событии, то для этого создают класс, производный от стандартного класса EventArgs, и добавляют собственный код. Если же программист не будет использовать в делегате собственный код , то собственный класс не создается, а используется стандартный класс System.EventHandler.
Пример стандартного делегата EventHandler для оповещения наблюдателей с помощью событий
namespace ConsoleApplication1 {class Источник { public event EventHandler My_event; public void Создать_событие() {Console.WriteLine("Событие создано!!!"); if(My_event!=null) My_event(this,null); } } class Наблюдатель1 {public void OnDo_Event(object sender, EventArgs e) {Console.WriteLine("ВИЖУ, что произошло событие!!!"); } } class Наблюдатель2 {public static void OnDo_Event(object sender, EventArgs e) {Console.WriteLine("Я тоже ВИЖУ, что произошло событие!!!"); } }
|
class Program {static void Main(string[] args) { Источник A = new Источник(); Наблюдатель1 B = new Наблюдатель1(); Наблюдатель1 C = new Наблюдатель1(); A.My_event += new EventHandler(B.OnDo_Event); A.My_event += new EventHandler(C.OnDo_Event); A.My_event += new EventHandler(Наблюдатель2.OnDo_Event); //анонимный обработчик!!! Создание нового метода для обработки события!!! A.My_event += delegate(object sender, EventArgs e) { Console.WriteLine("Я тоже с вами обрабатываю это событие"); }; A.Создать_событие(); Console.ReadKey(); } } }
|