主要内容

初始化属性值

初始化属性值有两种基本方法:

  • 定义具有默认值的属性——MATLAB®将相同的初始值赋给每个实例的属性。

  • 在构造函数中设置属性值构造函数为每个实例计算赋值语句,这使得实例具有唯一的初始属性值。

用默认值定义属性

可以使用值或表达式将默认值分配给单个属性。表达式不能包含变量。这个例子展示了为属性定义默认值的几种方法。

classdefPropExample属性Prop1 Prop2 =“一些文本”Prop3 = sin(pi/12) Prop4 =日期时间。空Prop5(1,1) double {mustBePositive}= 1结束结束
  • Prop1-属性定义没有指定默认值,因此MATLAB将属性值初始化为空[]).

  • Prop2—默认值为字符串标量“一些文本”

  • Prop3—默认值为罪(π/ 12).读取此属性将返回已求值表达式(0.2588),而不是表达本身。

    有关指定为默认值的表达式求值的详细信息,请参见类定义中的表达式求值而且包含对象的属性

  • Prop4—默认值为空datetime对象。

  • Prop5—默认值为1,且属性值一般限制为标量,为正双精度。当属性定义对属性值指定任何大小、类或验证函数限制时,默认值必须满足这些条件。例如,默认值0会在实例化过程中导致错误,因为它不满足要求mustBePositive

    有关基于大小、类和验证函数的属性限制的信息,请参见验证属性值

请注意

MATLAB在第一次需要属性值时计算默认表达式(例如,当类第一次实例化时)。然后将相同的默认值用于类的所有实例。除非从内存中清除类定义,否则MATLAB不会重新计算默认表达式。

按默认属性值处理对象

当使用句柄类构造函数创建默认属性值时,MATLAB仅在第一次使用类时调用构造函数,然后在所有实例中对属性使用与默认值相同的对象句柄。因为所有对象句柄都引用同一个对象,所以在一个实例中对句柄对象所做的任何更改都会反映在所有实例中的句柄对象中。若要在每次实例化类时使用句柄对象的新实例初始化属性值,请在构造函数中分配属性值。

在构造函数中设置属性值

要从类构造函数中为属性赋值,请引用构造函数返回的对象(输出变量)obj)和使用点符号的属性名。

classdefMyClass属性Prop1结束方法函数obj = MyClass(intval) obj。Prop1 = intval;结束结束结束

在类构造函数中将值赋给属性时,MATLAB会为所创建的每个对象计算赋值语句。如果希望每个对象包含该属性的惟一值,则在构造函数中分配属性值。

例如,ContainsHandle指定类的唯一句柄对象MyHandleClassProp1对于每个实例。ContainsHandle这是通过调用MyHandleClass构造函数。

classdefContainsHandle属性Prop1结束方法函数obj = ContainsHandle(keySet,valueSet)Prop1 = MyHandleClass(keySet,valueSet);结束结束结束

有关构造函数方法的更多信息,请参见在构造函数中引用对象

施工前属性验证

MATLAB在构造函数中赋值之前验证默认属性值。方法中分配的默认值属性块和类构造函数中为属性设置的任何值必须满足指定的验证。例如,PropInit限制道具标量的正双精度,但它不指定默认值。默认情况下,MATLAB将初始值赋为empty double。

classdefPropInit属性道具(1,1) double {mustBePositive}结束方法函数obj = PropInit(positiveInput) obj。道具= positiveInput;结束结束结束

使用有效值调用类构造函数道具仍然会因为初始空double in而导致错误道具.空double不满足验证函数mustBePositive

obj = PropInit(2);
使用类'PropInit'的属性'Prop'的隐式默认值时出错:值必须为正数。

要避免此问题,请确保属性具有满足验证的默认值,即使您打算在构造函数中覆盖这些值。

相关的话题