分配当属性值不变

AbortSet当值不会改变

当您设置一个属性值,MATLAB®触发属性预调后集事件,调用属性集方法(如果被定义),并且设置属性值。这些行为发生,即使属性的当前值是一样的新的价值。

您可以通过设置属性的防止这些行动AbortSet属性真正。什么时候AbortSet已启用,MATLAB比较当前属性值的新值分配给该属性。如果新的值是相同的电流值,MATLAB并不:

  • 设置属性值。

  • 触发预调后集事件。

  • 调用属性设置方法,如果存在的话。

对值进行比较,MATLAB必须得到属性的当前值。获取当前值会导致财产get方法(得到。属性)来执行,如果存在的话。调用的属性get方法时发生的任何错误都对用户可见,即使MATLAB不改变当前值。

怎么样MATLAB比较值

MATLAB使用是平等的函数以确定该属性的当前值是一样的新的值。要确定具体数值使用时,作为平等的评估AbortSet属性,看是平等的函数文档或任何是平等的方法重载该类的属性值的。

何时使用AbortSet

使用的AbortSet属性确实招致了当前和新的属性值的比较,一些开销。使用AbortSet因为是由分配之前,在当前和分配的值总是比较属性可以减缓所有的财产分配。该AbortSet属性是最有用:

  • 你想阻止的通知预调后集事件和监听器回调当属性值不改变的执行。

  • 设置属性值的成本比比较被分配值的当前属性值的成本更大,你愿意与所有分配的财产承担比较成本。

实施AbortSet

下面的示例演示如何AbortSet属性的作品。该AbortTheSet类定义了一个属性,PropOne,这对听众PreGet预调PostGet后集事件和使AbortSet属性。

注意

要使用这个类,保存AbortTheSet类具有相同名称的文件夹中MATLAB路径上的一个文件。

classdefAbortTheSet <手柄性能(SetObservable,GetObservable,AbortSet)PropOne = 7结束方法功能OBJ = AbortTheSet的addListener(OBJ,'PropOne''PreGet',@ obj.getPrePropEvt);的addListener(OBJ,'PropOne'“预设”,@ obj.setPrePropEvt);的addListener(OBJ,'PropOne''PostGet',@ obj.getPostPropEvt);的addListener(OBJ,'PropOne'“后集”,@ obj.setPostPropEvt);结束功能PROPVAL = get.PropOne(OBJ)DISP(“get.PropOne称为”)PROPVAL = obj.PropOne;结束功能set.PropOne(OBJ,val)的DISP(“set.PropOne称为”)obj.PropOne = VAL;结束功能getPrePropEvt(OBJ,SRC,EVNT)DISP(“前GET事件触发”%...结束功能setPrePropEvt(OBJ,SRC,EVNT)DISP(“预先设定的事件触发”%...结束功能getPostPropEvt(OBJ,SRC,EVNT)DISP(“后GET事件触发”%...结束功能setPostPropEvt(OBJ,SRC,EVNT)DISP(“后集事件触发”%...结束功能DISP(OBJ)%过载DISP来避免访问属性DISP(类(OBJ))结束结束结束

的类指定的初始值7为了PropOne属性。因此,如果您创建一个对象,并为其分配的属性值7,没有必要触发预调事件。但是,那getPropOne方法被调用来获取属性的当前值进行比较,以指定的山谷。

OBJ = AbortTheSet;obj.PropOne = 7;
get.PropOne叫

如果指定以外的值7,然后执行MATLAB下列步骤:

  • 获取当前属性值

  • 触发预调事件

  • 该属性设置为指定值

  • 触发后集事件

OBJ = AbortTheSet;obj.PropOne = 9;
get.PropOne所谓预先设定的事件触发set.PropOne所谓的后组事件触发

如果查询属性值时,PreGetPostGet事件被触发。

obj.PropOne
预GET事件触发get.PropOne所谓的后GET事件触发ANS = 9

使用AbortSet与属性验证

当类使用性能验证和AbortSet在一个属性定义,MATLAB评估比较的电流值,以被分配的值之前的属性的验证。例如,修改AbortTheSet类添加的大小限制1×3的PropOne属性。

classdefAbortTheSet <手柄性能(SetObservable,GetObservable,AbortSet)%限制大小1×3%***********************PropOne(1,3)= [7 7 7]%***********************结束方法功能OBJ = AbortTheSet的addListener(OBJ,'PropOne''PreGet',@ obj.getPrePropEvt);的addListener(OBJ,'PropOne'“预设”,@ obj.setPrePropEvt);的addListener(OBJ,'PropOne''PostGet',@ obj.getPostPropEvt);的addListener(OBJ,'PropOne'“后集”,@ obj.setPostPropEvt);结束功能PROPVAL = get.PropOne(OBJ)DISP(“get.PropOne称为”)PROPVAL = obj.PropOne;结束功能set.PropOne(OBJ,val)的DISP(“set.PropOne称为”)obj.PropOne = VAL;结束功能getPrePropEvt(OBJ,SRC,EVNT)DISP(“前GET事件触发”%...结束功能setPrePropEvt(OBJ,SRC,EVNT)DISP(“预先设定的事件触发”%...结束功能getPostPropEvt(OBJ,SRC,EVNT)DISP(“后GET事件触发”%...结束功能setPostPropEvt(OBJ,SRC,EVNT)DISP(“后集事件触发”%...结束功能DISP(OBJ)%过载DISP来避免访问属性DISP(类(OBJ))结束结束结束

由于MATLAB适用标扩展以满足大小限制,下面的分配不会触发预调要么后集事件。

OBJ = AbortTheSet;obj.PropOne = 7;
get.PropOne叫
obj.PropOne
预GET事件触发get.PropOne称为后得到事件触发ANS = 7 7 7

有关属性验证的信息,请参阅验证属性值

相关话题