Событие и Концепции прослушивателя

Модель события

События представляют изменения или действия, которые происходят внутри объектов. Для примера,

  • Изменение данных классов

  • Выполнение метода

  • Запрос или установка значения свойства

  • Уничтожение объекта

В основном любая активность, которую вы можете обнаружить программно, может сгенерировать событие и передать информацию другим объектам.

MATLAB® классы определяют процесс, который сообщает о вхождении событий другим объектам, которые отвечают на события. Модель события работает так:

Следующая схема иллюстрирует модель события.

Ограничения

Существуют определенные ограничения на использование событий:

  • Источник события не может гарантировать существование прослушивателей при запуске события.

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

  • Порядок выполнения прослушивателей не определен.

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

Данные о событиях по умолчанию

События предоставляют информацию для коллбэков прослушивателя путем передачи аргумента данных о событиях в функцию обратного вызова. По умолчанию MATLAB передает event.EventData объект для коллбэка прослушивателя. Этот объект имеет два свойства:

  • EventName - Имя события, заданное в классе event блок

  • Source - Объект, который является источником события

MATLAB передает исходный объект в коллбэк прослушивателя в необходимом аргументе данных о событиях. Используйте исходный объект для доступа к любым общественной собственности объекта из функции обратного вызова прослушивателя.

Настройка данных о событиях

Можно создать подкласс event.EventData Класс для предоставления дополнительной информации для прослушивателя функций обратного вызова. Подкласс определит свойства, которые будут содержать дополнительные данные, и предоставит метод для создания производного объекта данных о событиях, чтобы он мог быть передан notify способ.

Define Event-Specific Data предоставляет пример, показывающий, как настроить эти данные.

События только в классах Handle

Можно задать события только в классах handle. Это ограничение существует, потому что класс значений отображается только в одном рабочем пространстве MATLAB, поэтому ни один коллбэк или прослушиватель не может иметь доступа к объекту, который инициировал событие. Коллбэк может иметь доступ к копии объекта. Однако доступ к копии не полезен, потому что коллбэк не может получить доступ к текущему состоянию объекта, который инициировал событие или влияет на любые изменения в этом объекте.

Сравнение классов Handle и Value предоставляет общую информацию о классах Handle.

В синтаксисе событий и прослушивателей показан синтаксис определения класса Handle и событий.

Набор свойств и события запроса

Существует четыре предопределенных события, связанных со свойствами:

  • PreSet - Запускается непосредственно перед установкой значения свойства, перед вызовом его метода доступа к набору

  • PostSet - срабатывает сразу после того, как задано значение свойства

  • PreGet - Инициируется непосредственно перед обслуживанием запроса значения свойства, перед вызовом его метода get access

  • PostGet - срабатывает сразу после возврата значения свойства в запрос

Эти события предопределены и не должны быть перечислены в классе events блок.

Когда происходит событие свойства, коллбэк передается как event.PropertyEvent объект. Этот объект имеет три свойства:

  • EventName - Имя события, описанного этим объектом данных

  • Source - Исходный объект, класс которого определяет событие, описанное объектом данных

  • AffectedObject - Объект, свойство которого является источником для этого события (то есть AffectedObject содержит объект, свойство которого было доступно или изменено).

Можно задать свои собственные данные о событиях изменения свойств путем подклассификации event.EventData класс. The event.PropertyEvent класс является запечатанным подклассом event.EventData.

Описание процесса создания прослушивателей свойств см. в разделе «Прослушивание изменений значений свойств».

Пример см. в разделе Прослушиватель событий PostSet.

Смотрите Методы Доступа к Свойствам для получения информации о методах, которые управляют доступом к значениям свойств.

Прослушиватели

Прослушиватели инкапсулируют ответ на событие. Объекты прослушивателя принадлежат event.listener класс, являющийся классом handle, который задает следующие свойства:

  • Source - Указатель или массив указателей на объект, который сгенерировал событие

  • EventName - Имя события

  • Callback - Функция, которая выполняется, когда включённый прослушиватель получает уведомление о событии

  • Enabled - Функция обратного вызова выполняется только тогда, когда Enabled является true. См. пример в разделе «Включение и отключение Прослушивателей».

  • Recursive - Разрешить прослушивателю инициировать то же событие, которое вызвало выполнение коллбэка.

    Recursive является false по умолчанию. Если коллбэк инициирует событие, для которого он определен как коллбэк, прослушиватель не может выполнить рекурсивное выполнение. Поэтому задайте Recursive на false если коллбэк должен инициировать собственное событие. Установка Recursive свойство к true может создать ситуацию, когда бесконечная рекурсия достигает предела рекурсии и вызывает ошибку.

Управление жизненным циклом приемника предоставляет более подробную информацию.