Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции C# Часть1 A5.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.07 Mб
Скачать

Лекция 21. События Классы с событиями

Каждый объект является экземпляром некоторого класса. Класс задает свойства и поведение своих экземпляров. Методы класса определяют поведение объектов, свойства – их состояние. Все объекты обладают одними и теми же методами и, следовательно, ведут себя одинаково. Можно полагать, что методы задают врожденное поведение объектов. Этого нельзя сказать о свойствах, – значения свойств объектов различны, так что экземпляры одного класса находятся в разных состояниях. Объекты класса «Человек» могут иметь разные свойства: один – высокий, другой – низкий, один – сильный, другой – умный. Но методы у них одни: есть и спать, ходить и бегать. Как сделать поведение объектов специфическим? Как добавить им поведение, характерное для данного объекта? Один из наиболее известных путей – это наследование. Можно создать класс наследник, у которого наряду с наследованным родительским поведением будут и собственные методы. Например, наследником класса «Человек» может быть класс «Человек_Образованный», обладающий методами: читать и писать, считать и программировать.

Есть еще один механизм, позволяющий объектам вести себя по-разному в одних и тех же обстоятельствах. Это механизм событий, рассмотрением которого сейчас и займемся. Класс помимо свойств и методов может иметь события. Содержательно, событием является некоторое специальное состояние, в котором может оказаться объект класса. Так для объектов класса «Человек» событием может быть рождение или смерть, свадьба или развод. О событиях в мире программных объектов чаще всего говорят в связи с интерфейсными объектами, у которых события возникают по причине действий пользователя. Так командная кнопка может быть нажата – событие Click, документ может быть закрыт – событие Close, в список может быть добавлен новый элемент – событие Changed.

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

  • Объявить событие в классе.

  • Зажечь в нужный момент событие, передав обработчику необходимые для обработки аргументы. (Под зажиганием или включением события, понимается некоторый механизм, позволяющий объекту уведомить клиентов класса, что у него произошло событие.)

  • Проанализировать, при необходимости, результаты события, используя значения выходных аргументов события, возвращенные обработчиком.

Заметьте, зажигая событие, класс посылает сообщение получателям события – объектам некоторых других классов. Будем называть класс, зажигающий событие, классом – отправителем сообщения (sender). Класс, чьи объекты получают сообщения, будем называть классом – получателем сообщения (receiver). Класс, отправитель сообщения, в принципе, не знает своих получателей. Он отправляет сообщение в «безвоздушное» пространство. Одно и то же сообщение может быть получено и по-разному обработано произвольным числом объектов разных классов. Взгляните на схему, демонстрирующую взаимодействие объектов при посылке и получении сообщения:

Рис. 21.1. Взаимодействие объектов. Посылка и получение сообщения о событии