АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Теоретическая часть. Работу любого объекта можно рассматривать как некоторую последовательность выполняемых действий, в результате которых происходит переход из одного его

Читайте также:
  1. I ЧАСТЬ
  2. I. Организационная часть.
  3. II ЧАСТЬ
  4. III ЧАСТЬ
  5. III часть Menuetto Allegretto. Сложная трехчастная форма da capo с трио.
  6. III. Творческая часть. Страницы семейной славы: к 75-летию Победы в Великой войне.
  7. N-мерное векторное пространство действительных чисел. Компьютерная часть
  8. N-мерное векторное пространство действительных чисел. Математическая часть
  9. New Project in ISE (left top part) – окно нового проекта – левая верхняя часть окна.
  10. SCADA как часть системы автоматического управления
  11. XIV. Безмерное счастье и бесконечное горе
  12. А) та часть выручки, которая остается на покрытие постоянных затрат и формирование прибыли

События

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

Дело в том, что свойство представляет собой объект, объединяющий в себе закрытую переменную и открытые функции доступа к этой переменной. А что, если вместо переменной в свойстве использовать указатель на функцию? А вот тогда мы и получим то, что называют событием, указывающее на функцию-обработчик этого события. Но поскольку указатель представляет собой незащищенный тип, то вместо него лучше всего использовать делегат, который представляет собой экземпляр класса. Таким образом, событие представляет собой свойство, связанное через делегат с функцией, реагирующей данное событие и известная под названием функции-обработчика этого события.

Класс, решивший иметь события, должен уметь делать, по крайней мере, три вещи:

· объявить событие в классе;

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

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

Применительно к событиям введена следующая терминология. Объект, генерирующий события, называют источником (source), а объект, получающий событие, называют приёмником (sink). Функции приёмника, реагирующие на событие, называют обработчиками (handlers) события.

Часто используются и другие термины. Объект, генерирующий события, называют издателем (publisher). Говорят, что издатель публикует события, на которые должны подписаться подписчики (subscribers) - объекты, обработчики которых реагируют на события издателя. На событие указывает ссылка или дескриптор в объекте-издателе (объекте-источнике). Подписка на событие заключается в привязке к событию требуемого обработчика, то есть создание объекта делегата, инкапсулирующего обработчик объекта подписчика (объекта-приёмника), и добавления этого делегата к объекту события издателя. Объект события представляет собой особый множественный объект делегата, который может вызываться только в объекте-издателе.

Перед началом работы программной системы устанавливается связь между её компонентами, то есть осуществляется подписка компонентов-подписчиков на нужные им события конкретных компонентов-издателей. И только после завершения подписки компоненты начинают выполняться, передавать и получать события.

С событиями связано несколько особенностей. События могут использоваться только в том классе, в котором они описаны и не могут напрямую использоваться в порожденных классах. События отличаются от переменных-членов класса тем, что они могут быть помещены в интерфейс.

 


1 | 2 | 3 | 4 | 5 | 6 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.002 сек.)