Определение пользовательских данных о событиях

Требования данных о событиях класса

Предположим, что вы хотите создать функцию обратного вызова прослушивателя, которая имеет доступ к определенной информации, когда событие имеет место. Этот пример показывает как путем создания пользовательских данных о событиях.

События предоставляют информацию функциям обратного вызова прослушивателя путем передачи аргумента данных о событиях заданной функции. По умолчанию 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

Похожие темы