exponenta event banner

Концепции событий и слушателей

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

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

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

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

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

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

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

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

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

Ограничения

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

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

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

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

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

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

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

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

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

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

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

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

В разделе Определение специфичных для события данных приведен пример настройки этих данных.

События только в классах дескрипторов

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

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

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

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

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

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

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

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

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

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

При возникновении события свойства обратный вызов передается event.PropertyEvent объект. Этот объект имеет три свойства:

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

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

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

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

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

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

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

Слушатели

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

  • Source - дескриптор или массив дескрипторов объекта, создавшего событие;

  • EventName - Название события

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

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

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

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

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