Предположим, что вы хотите создать функцию обратного вызова прослушивателя, которая имеет доступ к определенной информации, когда событие имеет место. Этот пример показывает как путем создания пользовательских данных о событиях.
События предоставляют информацию функциям обратного вызова прослушивателя путем передачи аргумента данных о событиях заданной функции. По умолчанию MATLAB® передает объект event.EventData
коллбэку прослушивателя. Этот объект имеет два свойства:
EventName
Имя события инициировано этим объектом.
Source
— Указатель объекта, инициировавшего событие.
Предоставьте дополнительную информацию коллбэку прослушивателя путем разделения на подклассы класса event.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
. 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 callback
The value of Prop1 is overflowing! Its value was: 5 Its current value is: 15