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. Каждый экземпляр класса, желающий получать сообщение о событии должен зарегистрировать в экземпляре источнике метод обработки события.