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

namespace ConsoleApplication1

{

delegate void MyDelegate(object o);

class Источник

{

//Делегат-поле класса

MyDelegate del;

public void Reg(MyDelegate d)

//добавление делегатов

{ del += d; }

//событие, возникающее внутри источника – посылка наблюдателям извещения

public void Event()

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

if (del!= null) //если в делегате есть функция

del(this);//ВЫПОЛНИТЬ метод, “привязанный” к делегату

}

//удаление делегатов из списка зарегистрированных

public void UnReg(MyDelegate d)

{ del -= d; }

}

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

{

//”подходящий” делегту метод

public void Do_Event_1(object o)

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

}

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

{

public static void Do_Event_2(object o)

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

}

class Program

{static void Main(string[] args)

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

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

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

//зарегистрировали делегат (создали его экземпляр), “привязали” к нему метод

A.Reg(new MyDelegate(B.Do_Event_1));

A.Reg(new MyDelegate(С.Do_Event_1));

//то же самое, только для СТАТИЧЕСКОГО метода

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

A.Event();

//убрали одного наблюдателя для источника

A.UnReg(new MyDelegate(B.Do_Event_1));

A.Event();

Console.ReadKey(); } }}

Делегат как процедура обратного вызова

Так как делегат является классом, его можно передавать в методы в качестве параметра. Это называется функциональной параметризацией. Функциональная параметризация применяется для создания универсальных методов (например, метод вывода таблицы значений функции) и возможности обеспечения обратного вызова.

Обратный вызов (callback) представляет собой вызов функции, передаваемой в другую функцию в качестве параметра.

В качестве примера “универсального” метода и демонстрации обратного вызова функции рассмотрим передачу делегата в качестве параметра метода, который выводит на экран таблицу значений функции. В качестве параметров выступают диапазон значений аргумента, шаг его измерений и вид вычисляемой функции (ДЕЛЕГАТ).


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



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