Когда вы устанавливаете значение свойства, MATLAB® инициировал свойство PreSet
и PostSet
события, вызывает метод набора свойств (если вы заданы), и устанавливает значение свойства. Эти действия происходят, даже когда текущее значение свойства совпадает с новым значением.
Можно предотвратить эти действия путем установки AbortSet
свойства припишите
true
. Когда AbortSet
включен, MATLAB сравнивает текущее значение свойства с новым значением, присваиваемым свойству. Если новое значение совпадает с текущим значением, MATLAB не делает:
Установите значение свойства.
Инициируйте PreSet
и PostSet
события.
Вызовите метод набора свойств, если вы существуете.
Чтобы сравнить значения, MATLAB должен получить текущее значение свойства. Получение причин текущего значения, свойство получает метод (добраться.
) выполниться, если вы существуете. Любые ошибки, которые происходят при вызове свойства, добираются, метод отображаются пользователю, даже если MATLAB не изменяет текущее значение.Property
MATLAB использует isequal
функция, чтобы определить, совпадает ли текущее значение свойства с новым значением. Определить, оценивают ли определенные значения как равные при использовании AbortSet
припишите, смотрите isequal
поиск по функциям или любой isequal
метод, перегруженный для класса значения свойства.
Использование AbortSet
атрибут действительно подвергается немного служебным по сравнению с текущими и новыми значениями свойств. Используя AbortSet
атрибут может замедлить все присвоения свойства, потому что текущее и присвоенное значение всегда сравнивается, прежде чем присвоение сделано. AbortSet
атрибут является самым полезным когда:
Вы хотите предотвратить уведомление о PreSet
и PostSet
события и выполнение коллбэков прослушивателя, когда значение свойства не изменяется.
Стоимость установки значения свойства больше стоимости сравнения текущего значения свойства со значением, присваиваемым, и вы готовы понести расходы сравнения со всеми присвоениями на свойство.
Следующий пример показывает как AbortSet
припишите работает. AbortTheSet
класс задает свойство, PropOne
, это имеет прослушиватели для PreGet
, PreSet
, PostGet
, и PostSet
события и включают AbortSet
атрибут.
Чтобы использовать этот класс, сохраните AbortTheSet
класс в файле с тем же именем в папке на вашем пути MATLAB.
classdef AbortTheSet < handle properties (SetObservable, GetObservable, AbortSet) PropOne = 7 end methods function obj = AbortTheSet addlistener(obj,'PropOne','PreGet',@obj.getPrePropEvt); addlistener(obj,'PropOne','PreSet',@obj.setPrePropEvt); addlistener(obj,'PropOne','PostGet',@obj.getPostPropEvt); addlistener(obj,'PropOne','PostSet',@obj.setPostPropEvt); 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 getPrePropEvt(obj,src,evnt) disp ('Pre-get event triggered') % ... end function setPrePropEvt(obj,src,evnt) disp ('Pre-set event triggered') % ... end function getPostPropEvt(obj,src,evnt) disp ('Post-get event triggered') % ... end function setPostPropEvt(obj,src,evnt) disp ('Post-set event triggered') % ... end function disp(obj) % Overload disp to avoid accessing property disp (class(obj)) end end end
Класс задает начальное значение 7
для PropOne
свойство. Поэтому, если вы создаете объект и присваиваете значение свойства 7
, нет никакой потребности инициировать PreSet
событие. Однако getPropOne
метод называется, чтобы получить текущее значение свойства выдержать сравнение с присвоенной долиной.
obj = AbortTheSet; obj.PropOne = 7;
get.PropOne called
Если вы задаете значение кроме 7
, затем MATLAB выполняет эти шаги:
Получает текущее значение свойства
Инициировал PreSet
событие
Устанавливает свойство на присвоенное значение
Инициировал PostSet
событие
obj = AbortTheSet; obj.PropOne = 9;
get.PropOne called Pre-set event triggered set.PropOne called Post-set event triggered
Если вы запрашиваете значение свойства, PreGet
и PostGet
события инициированы.
obj.PropOne
Pre-get event triggered get.PropOne called Post-get event triggered ans = 9
Когда классы используют валидацию свойства и AbortSet
в определении свойства MATLAB выполняет валидацию свойства прежде, чем сравнить текущее значение с присваиваемым значением. Например, пересмотрите AbortTheSet
класс, чтобы добавить ограничение размера 1 3 к PropOne
свойство.
classdef AbortTheSet < handle properties (SetObservable, GetObservable, AbortSet) % Restrict size to 1-by-3 % *********************** PropOne (1,3) = [7 7 7] % *********************** end methods function obj = AbortTheSet addlistener(obj,'PropOne','PreGet',@obj.getPrePropEvt); addlistener(obj,'PropOne','PreSet',@obj.setPrePropEvt); addlistener(obj,'PropOne','PostGet',@obj.getPostPropEvt); addlistener(obj,'PropOne','PostSet',@obj.setPostPropEvt); 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 getPrePropEvt(obj,src,evnt) disp ('Pre-get event triggered') % ... end function setPrePropEvt(obj,src,evnt) disp ('Pre-set event triggered') % ... end function getPostPropEvt(obj,src,evnt) disp ('Post-get event triggered') % ... end function setPostPropEvt(obj,src,evnt) disp ('Post-set event triggered') % ... end function disp(obj) % Overload disp to avoid accessing property disp (class(obj)) end end end
Поскольку MATLAB применяет скалярное расширение, чтобы удовлетворить ограничению размера, следующее присвоение не инициировало PreSet
или PostSet
события.
obj = AbortTheSet; obj.PropOne = 7;
get.PropOne called
obj.PropOne
Pre-get event triggered get.PropOne called Post-get event triggered ans = 7 7 7
Для получения информации о валидации свойства см. Проверку значений свойств.