Лабораторная работа 13. Делегаты. События
Лабораторная работа 13. Делегаты. События.
Делегаты.
Делегат – это специальный объект, указывающий на метод или список методов. В отличие от указателей на методы в C++, делегаты .NET имеют встроенный инструментарий для мультикастинга (вызова разом нескольких методов) и асинхронного вызова методов.
Чтобы создать делегат, следует использовать код следующего вида:
public delegate int BinaryOperator(int x, int y);
Когда компилятор обрабатывает создание делегата, он автоматически создаёт класс-наследник от System.MulticastDelegate, содержащий в себе 3 публичных метода:
Invoke()
BeginInvoke()
EndInvoke()
Здесь первый метод применяется для синхронного вызова методов, ссылки на которые хранятся в делегате, а 2й и 3й методы – для начала и окончания асинхронного вызова.
Подробный пример создания и использования делегата рассмотрен в лекции.
События.
Ключевое слово event служит для упрощения и ускорения работы с делегатами. Когда компилятор обрабатывает ключевое слово event, он автоматически создаёт методы для регистрации и разрегистрации методов делегата, а также все необходимые поля для вашего типа делегата.
Создание события – процесс из 2 шагов. Сначала нужно создать делегат, который будет хранить список методов, которые будут вызываться при срабатывании события. Затем следует объявить событие для этого делегата.
public class Car
{
// Объявляем делегат
public delegate void CarEventHandler(string msg);
// Объявляем обработчики событий
public event CarEventHandler Exploded;
public event CarEventHandler AboutToBlow;
}
Чтобы инициировать событие, достаточно вызвать соответствующий обработчик.
class Car
{
public delegate void CarEventHandler(string msg);
public event CarEventHandler Exploded;
public event CarEventHandler InDanger;
public void Drive()
{
for (int i = 0; i < 200; i += 10)
{
if (i > 150 & i < 190)
{
InDanger("Warning! Speed is " + i);
}
else if (i >= 190)
{
Exploded("Car exploded");
}
}
}
}
Чтобы обработать вызванное событие, надо присвоить хэндлерам соответствующие функции.
Car a = new Car();
a.Exploded += Alert;
a.InDanger += Report;
Задания:
Дополните класс, созданный вами в одной из прошлых лабораторных работ делегатами на ваш выбор. Создайте по 2 соответствующих метода для делегата в отдельном классе.
Продемонстрируйте работу делегатов.
Примечание:
Выполнять работу можно на любом ОО-языке.
страница 1
скачать
Другие похожие работы: