Высокоуровневые методы информатики и программирования. Тузовский А.Ф. - 84 стр.

UptoLike

Составители: 

84
тоды (передают ему сообщения). При работе вызванных методов часто
возникает необходимость передать сообщения о возникших ситуациях
(важных изменения в своей работе) объектам вызывающего класса, без
завершения их работы. Для передачи таких сообщений и используются
специальные элементы класса – события.
Класс, которому требуется сообщать о возникновении некоторых
ситуаций событий, должен уметь делать следующее:
объявить тип делегата, соответствующего событию;
объявить событие в классе (экземпляр делегата);
инициировать в нужный момент событие, передав обработчику
необходимые для обработки параметры (т.е. некоторым способом
уведомить клиентов класса, что у него произошло событие).
Инициируя событие, класс посылает сообщение получателям со-
бытия объектам некоторых других классов. Класс, инициирующий
событие, называется отправителем сообщения (sender). Классы, чьи
объекты получают сообщения, называют классами получателями со-
общений (receiver). Класс-отправитель сообщения, в принципе, не знает
своих получателей. Он просто инициирует событие. Одно и то же со-
общение может быть получено и по-разному обработано произвольным
числом объектов разных классов.
Интерфейсы и многие классы FCL обладают стандартным набо-
ром предопределенных событий.
Объявление события в классе
Сообщение, посылаемое при инициировании события, является
аналогом вызова метода. Поскольку сигнатура посылаемого сообщения
должна соответствовать сигнатуре принимаемого сообщения, то объяв-
ление события синтаксически должно задавать сигнатуру метода.
В C# работа событий реализуется с помощью делегатов. Каждое
событие задается делегатом, описывающим сигнатуру метода, который
будет обрабатывать сообщения (обработчика события). Объявление со-
бытия – это двухэтапный процесс:
Вначале объявляется делегат, как это рассматривалось ранее.
Объявление делегата описывается в некотором классе. Но, часто,
это объявление находится вне класса в пространстве имен. На-
пример:
public delegate <тип> <имя_делегата> ([параметры]);
Если делегат определен, то в классе, создающем события, доста-
точно объявить событие как экземпляр соответствующего делега-
та. При этом используется ключевое слово event (это гарантиру-