Пример передачи делегата в качестве параметра функции

namespace ConsoleApplication1

{

delegate double MyDelegate(double x);

class Program

{

//в качестве параметров – делегат(вид функции), дапазон значений)

public static void Table(MyDelegate del, double x, double b)

{Console.WriteLine("=========X================Y==================");

while (x <= b)

{

//вызов функции через делегат

Console.WriteLine("|{0,8:0.000}|{1,8:0.000}|", x, del(x));

x += 1;

}

Console.WriteLine("---------------------------------------------");

}

static void Main(string[] args)

{Console.WriteLine("Таблица функции синуса: ");

//вызывается фунция sin(x)

//аналогично написать – new MyDelegate (Math.Sin)

Table(Math.Sin, -2, 2);

Console.WriteLine("Таблица любой функции,принимающей Любое double и возвращающей всегда 1!!!: ");

//АНОНИМНЫЙ МЕТОД!!!

Table(delegate(double x) { return 1;}, 0, 3);

Console.ReadKey();

}

}

}

Делегат, как обработчик событий

Событие – это элемент класса, позволяющий классу посылать другим объектам извещения об изменении своего состояния. При этом для этих объектов (наблюдателей) должны обрабатываться эти события. Обработка событий должна быть зарегистрирована в объекте - источнике.

Таким образом, механизм событий реализует паттерн ”наблюдатель”.

Такой паттерн можно еще назвать моделью “публикация-подписка” – один класс (источник, отправитель) сообщения публикует события, которые он может создавать, а другие классы (получатели, наблюдатели) подписываются на получение этих событий.

События тесно связаны с делегатами – с помощью делегатов вызываются обработчики событий.

Общий синтаксис объявления события:

[cпецификаторы] event тип делегата имя события, где

спецификаторы – new,public,virtual,static и др, причем событие может быть статическим (для класса) и обычным (для экземпляра класса)

event– ключевое слово.

тип делегата – это делегат, методы которого будут обрабатывать данное событие

Пример объявления события:

public delegate void My(object o);//объявление делегата

class A

{ public event My My_Event//объявление события My_Event

}

Алгоритм работы с событиями:

1. Объявление делегата, задающего сигнатуру методов – обработчиков событий

2. Объявление события внутри класса (источника)

3. Объявление и реализация метода, создаваемого событие

4. Объявление и реализация методов внутри классов (наблюдателей)– обработчиков события (привязанных к делегату). Их сигнатура должна совпадать с делегатом.

5. Каждый экземпляр класса, желающий получать сообщение о событии должен зарегистрировать в экземпляре источнике метод обработки события.


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



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