Для классов Handle можно задать прослушиватели для предзаявленных событий свойства (названный: PreSet
, PostSet
, PreGet
, и PostGet
). Создать прослушиватели для тех именованных событий:
Задайте SetObservable
и/или GetObservable
атрибуты свойств.
Задайте функции обратного вызова
Создайте прослушиватель свойства включением имени свойства и события в вызове addlistener
или listener
.
При необходимости разделите на подклассы event.data
чтобы создать специализированные данные о событиях возражают, чтобы передать функции обратного вызова.
Предотвратите выполнение коллбэка, если новое значение совпадает с текущим значением (см. Присвоение, Когда Значение свойства Неизменно).
В блоке свойств включите SetObservable
атрибут. Можно задать PreSet
и PostSet
прослушиватели для свойств задали в этом блоке:
properties (SetObservable) PropOne PropTwo ... end
Прослушиватель выполняет функцию обратного вызова, когда MATLAB® инициировал событие свойства. Задайте функцию обратного вызова, чтобы иметь два определенных аргумента, которые передаются функции автоматически, когда названо прослушивателем:
Источник события — meta.property
объект, описывающий объект, который является источником события свойства
Данные о событиях — event.PropertyEvent
объект, содержащий информацию о событии
Можно передать дополнительные аргументы при необходимости. Часто просто задать этот метод как Static
потому что эти два аргумента содержат самую необходимую информацию в своих свойствах.
Например, предположите handlePropEvents
функция является статическим методом прослушивателей создания класса для двух свойств объекта другого класса:
methods (Static) function handlePropEvents(src,evnt) switch src.Name case 'PropOne' % PropOne has triggered an event ... case 'PropTwo' % PropTwo has triggered an event ... end end end
Другая возможность состоит в том, чтобы использовать event.PropertyEvent
EventName
объекта свойство в
switch
оператор, чтобы выключить имя события (PreSet
или PostSet
в этом случае).
Метаданные классов предоставляют больше информации о meta.property
класс.
addlistener
метод класса Handle позволяет вам присоединить прослушиватель свойства, не храня объект прослушивателя как персистентную переменную. Для события свойства используйте версию с четырьмя аргументами addlistener
.
Вот вызов addlistener
:
addlistener(EventObject,'PropOne','PostSet',@ClassName.handlePropertyEvents);
Аргументы:
EventObject
— указатель объекта, генерирующего событие
PropOne
— имя свойства, которое вы хотите послушать
PostSet
— имя события, для которого вы хотите послушать
— указатель на функцию, ссылающийся на статический метод, который требует использования имени классаClassName
.handlePropertyEvents
Если ваш коллбэк прослушивателя является обычным методом и не статическим методом, синтаксис:
addlistener(EventObject,'PropOne','PostSet',@obj.handlePropertyEvents);
где obj
указатель объекта, задающего метод коллбэка.
Если коллбэк прослушивателя является функцией, которая не является методом класса, вы передаете указатель на функцию этой функции. Предположим, что функция обратного вызова является функцией пакета:
addlistener(EventObject,'PropOne','PostSet',@package.handlePropertyEvents);
Для получения дополнительной информации о передаче функций в качестве аргументов см. Создание указателя на функцию.
Следующие два класса показывают, как создать PostSet
прослушиватели свойства для двух свойств — PropOne
и PropTwo
.
PropEvent
класс включает свойство PreSet
и PostSet
инициирование события путем определения SetObservable
атрибут свойства. Эти свойства также включают AbortSet
припишите, который предотвращает инициирование событий свойства, если свойства установлены в значение, которое совпадает с их текущим значением (см. Присвоение, Когда Значение свойства Неизменно).
classdef PropEvent < handle properties (SetObservable, AbortSet) PropOne PropTwo end methods function obj = PropEvent(p1,p2) if nargin > 0 obj.PropOne = p1; obj.PropTwo = p2; end end end end
PropListener
класс задает два прослушивателя:
Свойство PropOne
PostSet
событие
Свойство PropTwo
PostSet
событие
Можно задать прослушиватели для других событий или других свойств с помощью аналогичного подхода. Не необходимо использовать ту же функцию обратного вызова в каждом прослушивателе. Смотрите meta.property
и event.PropertyEvent
страницы с описанием для больше на информации, содержавшейся в аргументах, передали функции обратного вызова прослушивателя.
classdef PropListener < handle % Define property listeners methods function obj = PropListener(evtobj) if nargin > 0 addlistener(evtobj,'PropOne','PostSet',@PropListener.handlePropEvents); addlistener(evtobj,'PropTwo','PostSet',@PropListener.handlePropEvents); end end end methods (Static) function handlePropEvents(src,evnt) switch src.Name case 'PropOne' sprintf('PropOne is %s\n',num2str(evnt.AffectedObject.PropOne)) case 'PropTwo' sprintf('PropTwo is %s\n',num2str(evnt.AffectedObject.PropTwo)) end end end end