
- •Делегаты
- •Передача делегатов в методы
- •Пример: решение алгебраических уравнений методом бисекции
- •static double F1(double x)
- •public delegate double Fun(double x); // объявление делегата class Test
- •Возможны и другие способы вызова:
- •Делегат может представлять несколько методов:
- •Реализация паттерна
- •Программисты часто используют одну и ту же схему организации и взаимодействия объектов в
- •Описание класса - источника:
- •Описание классов - наблюдателей:
- •Основная программа:
- •Для обеспечения обратной связи между наблюдателем и источником делегат объявлен с параметром типа
- •Возможные операции с делегатами
- •События
- •Событием может быть нажатие кнопки, выбор команды меню, завершение какой-либо операции и т.
- •События и делегаты
- •EventArgs является классом, базовым для всех классов параметров событий. Классы, производные от EventArgs,
- •Предположим, создается класс Clock, который с помощью события уведомляет классы-подписчики о том, что
- •Описание : public event TimeChangeHandler OnChange;
- •Пример «Симуляция и обработка события ButtonClick».
- •class Program {
Пример «Симуляция и обработка события ButtonClick».
using System;
delegate void MyDelegate(); // тип делегата
class Button // Класс, имитирующий кнопку.
{
// Cобытие, к которому смогут подключаться все желающие.
public event MyDelegate OnClick;
//Данная функция необходима для того, чтобы
//симулировать событие нажатия на кнопку. public void SimulateClick()
{
Console.WriteLine(«-- Нажали кнопку --"); if (OnClick != null) OnClick();
}
}

class Program { |
|
static void Main() |
{ |
//Создаем экземпляр класс Button sc = new Button();
//Добавляем обработчики к его sc.SimulateClick(); // "нажим
//Добавляем обработчики к его sc.OnClick += new sc.SimulateClick(); // "нажим
//Добавили в пул ещё одного делегата sc.OnClick += ButtonClick2; sc.SimulateClick(); // "нажимаем" кнопку sc.OnClick -= ButtonClick1; sc.SimulateClick(); // "нажимаем" кнопку
}
// Функции - обработчики события нажатия на кнопку. static void ButtonClick1()
{Console.WriteLine("Hello, World!"); } static void ButtonClick2()
{Console.WriteLine("Не жми, сломаешь!"); }
}