
Тема 5.4. Отношения между классами. Интерфейсы, делегаты и события
5.4.1. Понятие отношения между классами
5.4.2. Отношение вложенности
5.4.3. Наследование
5.4.3. Статический контроль типов и динамическое связывание
5.4.4. Пример работы с полиморфным семейством классов
5.4.5. Абстрактные классы
5 .4.6. Интерфейсы
5.4.7. Проблемы множественного наследования
5.4.8. Встроенные интерфейсы
5. 5.1. Как определяется функциональный тип, и как появляются его экземпляры
5.5.2. Функции высших порядков
5.5.3. Наследование и полиморфизм – альтернатива обратному вызову
5.5.4. Делегаты как свойства
5.5.5. Операции над делегатами. Класс Delegate
Пример «Комбинирование делегатов»
5.5.6. Классы с событиями
Вариант 1
Обработчик события:
всегда принадлежит классу, зажигающему событие;
никогда не принадлежит классу, зажигающему событие;
может принадлежать классу, зажигающему событие;
принадлежит только одному классу, слушающему событие;
может принадлежать многим классам, слушающим события.
Отметьте истинные высказывания:
все события имеют одинаковую сигнатуру из двух аргументов с одними и теми же типами;
все события имеют сигнатуру из двух аргументов, но с отличающимися типами;
все события, не имеющие собственных аргументов, передаваемых обработчику, соответствуют стандартному встроенному делегату EventHandler;
для класса с большим числом событий целесообразно применять динамическое связывание;
для связывания событий с обработчиком можно применять только операцию +=.
Объявление события в классе может представлять собой:
объявление метода класса;
объявление поля класса;
объявление процедуры-свойства класса с методами getиset;
объявление процедуры-свойства класса с методами addиremove.
Вариант 2
Объекты одного класса:
имеют одинаковый набор событий;
в процессе вычислений зажигают одинаковый набор событий;
в процессе вычислений зажигают набор событий, характерный для объекта;
в разных сеансах работы зажигают одинаковый набор событий;
в разных сеансах работы зажигают разные события.
Отметьте истинные высказывания:
класс, обрабатывающий событие, может отсоединить других обработчиков события и полностью определить реакцию на событие;
каждый объект определяет, какой обработчик присоединяется к событию;
метод GetInvocationListне применим к событиям;
все события имеют одну и ту же сигнатуру.
Класс EventHandler:
является классом, которому принадлежат все события;
является абстрактным классом и не может иметь экземпляров;
является родительским классом для событий, не имеющих собственных аргументов;
является потомком класса Delegate;
накладывает ограничения на сигнатуру события.
Вариант 3
Процедура, в которой зажигается событие:
передает обработчику событий входные аргументы и продолжает свою работу;
передает обработчику событий входные аргументы и ждет окончания работы первого обработчика, связанного с событием;
передает обработчику событий входные аргументы и ждет окончания работы всего списка обработчиков, связанного с событием;
может получить от обработчиков выходные аргументы и использовать их в своей работе.
Отметьте истинные высказывания:
события – это специализированный вариант делегатов;
к каждому событию должен быть присоединен хотя бы один обработчик события;
методы CombineиRemove, наследованные от классаDelegateне применимы к событиям;
допустимо динамическое связывание событий с обработчиками событий.
Все аргументы события принадлежат:
классу EventArgs;
классу EventArgs, за исключением аргумента, задающего объект, зажигающий событие;
потомку класса EventArgs;
потомку класса EventArgsза исключением аргумента, задающего объект, зажигающий событие;
возможно разным классам.