logo
otvety1

283 События в объектно-ориентированном программировании.

Механизм, позволяющий объектам вести себя по-разному в одних и тех же обстоятельствах - это механизм событий. Класс, помимо свойств и методов, может иметь события. Содержательно, событием является некоторое специальное состояние, в котором может оказаться объект класса. Так, для объектов класса "человек" событием может быть рождение или смерть, свадьба или развод.

Интерфейсные и многие другие программные объекты обладают стандартным набором предопределенных событий. Класс, решивший иметь события, должен уметь, по крайней мере, три вещи: 1)объявить событие в классе; 2)зажечь в нужный момент событие, передав обработчику необходимые для обработки аргументы. (Под зажиганием или включением события понимается некоторый механизм, позволяющий объекту уведомить клиентов класса, что у него произошло событие.); 3)проанализировать, при необходимости, результаты события, используя значения выходных аргументов события, возвращенные обработчиком.

Обработчик события - это обычная процедура с аргументами.

Объявление события - это двухэтапный процесс:

Вначале объявляется делегат - функциональный класс, задающий сигнатуру. Как отмечалось при рассмотрении делегатов, объявление делегата может быть помещено в некоторый класс, например, класс Sender. Но, чаще всего, это объявление находится вне класса в пространстве имен. Поскольку одна и та же сигнатура может быть у разных событий, то для них достаточно иметь одного делегата. Для некоторых событий можно использовать стандартные делегаты, встроенные в каркас. Тогда достаточно знать только их имена.

Если делегат определен, то в классе Sender, создающем события, достаточно объявить событие как экземпляр соответствующего делегата. Это делается точно так же, как и при объявлении функциональных экземпляров делегата. Исключением является добавление служебного слова event.