Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 семестр / Учебники / Все лекции С# / Все лекции С# / Лекция 20. Делегаты и события.doc
Скачиваний:
156
Добавлен:
24.02.2016
Размер:
150.53 Кб
Скачать

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

В библиотеке .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(); }

}

}