NetNado
  Найти на сайте:

Учащимся

Учителям



Лабораторная работа 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


скачать

Другие похожие работы:

Лабораторная работа 13. Делегаты. События

Лабораторная работа: 1 стр.

Документы

архив: 1 стр.

Документы

архив: 1 стр.

Документы

архив: 1 стр.

Документы

архив: 1 стр.

Документы

архив: 1 стр.

Документы

архив: 1 стр.

Лабораторная работа 1

Лабораторная работа: 6 стр.