Для классов дескрипторов можно определить прослушиватели для предварительно объявленных событий свойств (имя: PreSet, PostSet, PreGet, и PostGet). Чтобы создать прослушиватели для именованных событий, выполните следующие действия.
Укажите SetObservable и/или GetObservable атрибуты свойства.
Определение функций обратного вызова
Создайте прослушиватель свойств, включив имя свойства и событие в вызов addlistener или listener.
При необходимости подкласс event.data создание специализированного объекта данных события для передачи функции обратного вызова.
Запретить выполнение обратного вызова, если новое значение совпадает с текущим (см. раздел Назначение при неизменном значении свойства).
В блоке свойств включите SetObservable атрибут. Можно определить PreSet и PostSet прослушиватели свойств, определенных в этом блоке:
properties (SetObservable) PropOne PropTwo ... end
Прослушиватель выполняет функцию обратного вызова, когда MATLAB ® запускает событие свойства. Определите функцию обратного вызова, чтобы иметь два конкретных аргумента, которые передаются функции автоматически при вызове прослушивателем:
Источник события - a meta.property объект, описывающий объект, являющийся источником события свойства
Данные о событии - a 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метод класса дескриптора позволяет присоединить прослушиватель к свойству без сохранения объекта прослушивателя в качестве постоянной переменной. Для события свойства используйте версию с четырьмя аргументами 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