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