События представляют изменения или действия, которые происходят внутри объектов. Для примера,
Изменение данных классов
Выполнение метода
Запрос или установка значения свойства
Уничтожение объекта
В основном любая активность, которую вы можете обнаружить программно, может сгенерировать событие и передать информацию другим объектам.
MATLAB® классы определяют процесс, который сообщает о вхождении событий другим объектам, которые отвечают на события. Модель события работает так:
Класс handle объявляет имя, используемое для представления события. Назовите События
После создания объекта класса объявления событий присоедините прослушиватель к этому объекту. Управление жизненным циклом приемника
Вызов класса handle notify
метод транслирует уведомление о событии прослушивателям. Пользователь класса определяет, когда инициировать событие. Инициирование событий
Прослушиватели выполняют функцию обратного вызова, когда уведомляют, что событие произошло. Определение обратных коллбэков прослушивателя
Можно связать прослушиватели с жизненным циклом объекта, который определяет событие, или ограничить прослушиватели существованием и возможностями объекта прослушивателя. Управление жизненным циклом приемника
Следующая схема иллюстрирует модель события.
Существуют определенные ограничения на использование событий:
Источник события не может гарантировать существование прослушивателей при запуске события.
Прослушиватель не удается предотвратить уведомление других прослушивателей о произошедшем событии.
Порядок выполнения прослушивателей не определен.
Прослушиватели не должны изменять объект данных о событиях, переданный в прослушиватель коллбэка, потому что другие прослушиватели передают этот же объект указателя.
События предоставляют информацию для коллбэков прослушивателя путем передачи аргумента данных о событиях в функцию обратного вызова. По умолчанию MATLAB передает event.EventData
объект для коллбэка прослушивателя. Этот объект имеет два свойства:
EventName
- Имя события, заданное в классе event
блок
Source
- Объект, который является источником события
MATLAB передает исходный объект в коллбэк прослушивателя в необходимом аргументе данных о событиях. Используйте исходный объект для доступа к любым общественной собственности объекта из функции обратного вызова прослушивателя.
Можно создать подкласс event.EventData
Класс для предоставления дополнительной информации для прослушивателя функций обратного вызова. Подкласс определит свойства, которые будут содержать дополнительные данные, и предоставит метод для создания производного объекта данных о событиях, чтобы он мог быть передан notify
способ.
Define Event-Specific Data предоставляет пример, показывающий, как настроить эти данные.
Можно задать события только в классах 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
может создать ситуацию, когда бесконечная рекурсия достигает предела рекурсии и вызывает ошибку.
Управление жизненным циклом приемника предоставляет более подробную информацию.