Предположим, что необходимо создать функцию обратного вызова прослушивателя, которая имеет доступ к определенной информации при возникновении события. В этом примере показано, как создавать пользовательские данные событий.
События предоставляют информацию функциям обратного вызова прослушивателя, передавая аргумент данных события указанной функции. По умолчанию MATLAB ® передает event.EventData объект для обратного вызова прослушивателя. Этот объект имеет два свойства:
EventName - имя события, инициированного этим объектом.
Source - дескриптор объекта, запускающего событие.
Предоставление дополнительной информации для обратного вызова прослушивателя путем подкласса event.EventData класс.
Определите свойства подкласса, содержащие дополнительные данные.
Определите конструктор, принимающий дополнительные данные в качестве аргументов.
Установите ConstructOnLoad атрибут класса.
Используйте конструктор подкласса в качестве аргумента для notify метод запуска события.
SimpleEventClass определяет метод набора свойств (см. раздел Методы набора свойств), из которого инициируется событие, если свойство имеет значение, превышающее определенный предел. Метод набора свойств выполняет следующие операции:
Сохранение исходного значения свойства
Устанавливает указанное значение свойства
Если указанное значение больше 10, метод set запускает Overflow событие
Передача исходного значения свойства и других данных события в SpecialEventDataClass объект для notify способ.
classdef SimpleEventClass < handle properties Prop1 = 0 end events Overflow end methods function set.Prop1(obj,value) orgvalue = obj.Prop1; obj.Prop1 = value; if (obj.Prop1 > 10) % Trigger the event using custom event data notify(obj,'Overflow',SpecialEventDataClass(orgvalue)); end end end end
Данные о событии всегда содержатся в event.EventData объект. SpecialEventDataClass добавляет исходное значение свойства к данным события путем подкласса event.EventData:
classdef (ConstructOnLoad) SpecialEventDataClass < event.EventData properties OrgValue = 0 end methods function eventData = SpecialEventDataClass(value) eventData.OrgValue = value; end end end
Чтобы послушать Overflow , прикрепить прослушиватель к экземпляру SimpleEventClass класс. Используйте addlistener для создания прослушивателя. Кроме того, необходимо определить функцию обратного вызова, которую прослушиватель должен выполнить при запуске события.
Функция setupSEC создает экземпляр SimpleEventClass и добавляет прослушиватель к объекту. В этом примере функция обратного вызова прослушивателя отображает информацию, которая содержится в eventData аргумент (который является SpecialEventDataClass объект).
function sec = setupSEC sec = SimpleEventClass; addlistener(sec,'Overflow',@overflowHandler) function overflowHandler(eventSrc,eventData) disp('The value of Prop1 is overflowing!') disp(['Its value was: ' num2str(eventData.OrgValue)]) disp(['Its current value is: ' num2str(eventSrc.Prop1)]) end end
Создать SimpleEventClass и добавьте прослушиватель:
sec = setupSEC;
sec.Prop1 = 5;
sec.Prop1 = 15; % listener triggers callbackThe value of Prop1 is overflowing! Its value was: 5 Its current value is: 15