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