Присвоение, когда неизменное значение свойства

AbortSet, когда значение не изменяется

Когда вы устанавливаете значение свойства, MATLAB® инициировал события свойства PreSet и PostSet, вызывает метод набора свойств (если вы заданы), и устанавливает значение свойства. Эти действия происходят, даже когда текущая стоимость свойства совпадает с новым значением.

Можно предотвратить эти действия путем установки атрибута AbortSet свойства на true. Когда AbortSet включен, MATLAB сравнивает текущее значение свойства с новым значением, присваиваемым свойству. Если новое значение совпадает с текущей стоимостью, MATLAB не делает:

  • Установите значение свойства.

  • Инициируйте события PreSet и PostSet.

  • Вызовите метод набора свойств, если вы существуете.

Чтобы сравнить значения, MATLAB должен получить текущую стоимость свойства. Получение причин текущей стоимости, которые свойство заставляет метод (get.Property) выполнять, если вы существуете. Любые ошибки, которые происходят при вызове свойства, добираются, метод видимы пользователю, даже если MATLAB не изменяет текущую стоимость.

Как MATLAB сравнивает значения

MATLAB использует функцию isequal, чтобы определить, совпадает ли текущая стоимость свойства с новым значением. Чтобы определить, оценивают ли определенные значения как равные при использовании атрибута AbortSet, смотрите поиск по функциям isequal или любой метод isequal, перегруженный для класса значения свойства.

Когда использовать AbortSet

Использование атрибута AbortSet действительно подвергается немного наверху по сравнению с текущими и новыми значениями свойств. Однако включение AbortSet полезно в этих случаях.

  • Стоимость установки значения свойства больше, чем стоимость сравнения текущей стоимости свойства с новым присваиваемым значением.

  • Вы хотите предотвратить уведомление о событиях PreSet и PostSet и выполнение обратных вызовов прослушивателя, когда значение свойства не изменяется.

Реализация AbortSet

Следующий пример показывает, как атрибут AbortSet работает. Класс AbortTheSet задает свойство, PropOne, который имеет прослушиватели для событий PreGet и PreSet и включает атрибут AbortSet. Поведение сообщения устанавливало/получало события, эквивалентно поэтому только пред, устанавливал/получал события, используются для простоты:

Примечание

Чтобы использовать этот класс, сохраните класс AbortTheSet в файле с тем же именем в папке на вашем пути MATLAB.

classdef AbortTheSet < handle
   properties (SetObservable, GetObservable, AbortSet)
      PropOne = 7
   end
   methods
      function obj = AbortTheSet(val)
         obj.PropOne = val;
         addlistener(obj,'PropOne','PreGet',@obj.getPropEvt);
         addlistener(obj,'PropOne','PreSet',@obj.setPropEvt);
      end
      function propval = get.PropOne(obj)
         disp('get.PropOne called')
         propval = obj.PropOne;
      end
      function set.PropOne(obj,val)
         disp('set.PropOne called')
         obj.PropOne = val;
      end
      function getPropEvt(obj,src,evnt)
         disp ('Pre-get event triggered')
         % ...
      end
      function setPropEvt(obj,src,evnt)
         disp ('Pre-set event triggered')
         % ...
      end
      function disp(obj)
         % Overload disp to avoid accessing property
         disp (class(obj))
      end
   end
end

Класс задает начальное значение 7 для свойства PropOne. Поэтому, если вы создаете объект со значением свойства 7, нет никакой потребности инициировать событие PreSet:

ats = AbortTheSet(7);
get.PropOne called

Если вы задаете значение кроме 7, то MATLAB инициировал событие PreSet:

ats = AbortTheSet(9);
get.PropOne called
set.PropOne called
get.PropOne called

Точно так же, если вы устанавливаете свойство PropOne на значение 9, атрибут AbortSet предотвращает присвоение свойства и инициирование события PreSet. Заметьте также, что нет никакого сгенерированного события PreGet. Только свойство добирается, метод называется:

ats.PropOne = 9;
get.PropOne called

Если вы запрашиваете значение свойства, событие PreGet инициировано:

a = ats.PropOne
Pre-get event triggered
get.PropOne called
a =

     9

Если вы устанавливаете свойство PropOne на различное значение, MATLAB:

  • Вызовы, которые свойство заставляет метод определять, изменяется ли значение

  • Инициировал событие PreSet

  • Вызывает метод набора свойств, чтобы установить новое значение

  • Вызовы, которые свойство заставляет метод снова определять, изменил ли результат вызова метода установки значение.

ats.PropOne = 11;
get.PropOne called
Pre-set event triggered
set.PropOne called
get.PropOne called

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

Похожие темы

Была ли эта тема полезной?