Пример делегата для оповещения наблюдателей с помощью событий

namespace ConsoleApplication1

{ public delegate void MyDelegate();

class Источник

{//событие – поле класса

public event MyDelegate My_event;

public void Создать_событие()

{ Console.WriteLine("Событие создано!!!");

//значение события по умолчанию null

if (My_event!= null) My_event();

}

}

class Наблюдатель1

{ public void Do_Event_1()

{ Console.WriteLine("ВИЖУ, что произошло событие!!!"); }

}

class Наблюдатель2

{ public static void Do_Event_2()

{ Console.WriteLine("Я тоже ВИЖУ, что произошло событие!!!"); }

}

class Program

{static void Main(string[] args)

{ Источник A = new Источник();

Наблюдатель1 B = new Наблюдатель1();

Наблюдатель1 С = new Наблюдатель1();

//регистрация обработчиков событий

A.My_event += new MyDelegate(B.Do_Event_1);

A.My_event += new MyDelegate(С.Do_Event_1);

A.My_event += new MyDelegate(Наблюдатель2.Do_Event_2);

A.Создать_событие();

A.My_event -= new MyDelegate(B.Do_Event_1);

A.Создать_событие(); Console.ReadKey();

}

}

}

Стандартные делегаты

В библиотеке.NET имеется большое количество стандартных делегатов, предназначенных для реализации обработки событий. Большинство из таких классов оформлено так:

  • Имя делегата заканчитвается EventHandler
  • Делегат получает 2 параметра – источник события (тип object), аргументы события (тип EventArgs)

Если обработчикам события требуется специфическая информация о событии, то для этого создают класс, производный от стандартного класса EventArgs, и добавляют собственный код. Если же программист не будет использовать в делегате собственный код, то собственный класс не создается, а используется стандартный класс System.EventHandler.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: