Когда вы устанавливаете значение свойства, MATLAB® инициировал события свойства PreSet
и PostSet
, вызывает метод набора свойств (если вы заданы), и устанавливает значение свойства. Эти действия происходят, даже когда текущая стоимость свойства совпадает с новым значением.
Можно предотвратить эти действия путем установки атрибута AbortSet
свойства на true
. Когда AbortSet
включен, MATLAB сравнивает текущее значение свойства с новым значением, присваиваемым свойству. Если новое значение совпадает с текущей стоимостью, MATLAB не делает:
Установите значение свойства.
Инициируйте события PreSet
и PostSet
.
Вызовите метод набора свойств, если вы существуете.
Чтобы сравнить значения, MATLAB должен получить текущую стоимость свойства. Получение причин текущей стоимости, которые свойство заставляет метод (
) выполнять, если вы существуете. Любые ошибки, которые происходят при вызове свойства, добираются, метод видимы пользователю, даже если MATLAB не изменяет текущую стоимость.get.Property
MATLAB использует функцию isequal
, чтобы определить, совпадает ли текущая стоимость свойства с новым значением. Чтобы определить, оценивают ли определенные значения как равные при использовании атрибута AbortSet
, смотрите поиск по функциям isequal
или любой метод isequal
, перегруженный для класса значения свойства.
Использование атрибута AbortSet
действительно подвергается немного наверху по сравнению с текущими и новыми значениями свойств. Однако включение AbortSet
полезно в этих случаях.
Стоимость установки значения свойства больше, чем стоимость сравнения текущей стоимости свойства с новым присваиваемым значением.
Вы хотите предотвратить уведомление о событиях PreSet
и PostSet
и выполнение обратных вызовов прослушивателя, когда значение свойства не изменяется.
Следующий пример показывает, как атрибут 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 должен запросить значение свойства, которое следовало бы из присвоения после вызова метода набора свойств. Результатом являются множественные вызовы свойства, получают метод, если вы заданы для того свойства.