通过以下方式控制属性定义的各个方面:
属性不能与类同名。
在MATLAB中始终使用区分大小写的属性名称®代码。
初始化属性值有两种基本方法:
在属性定义- MATLAB只计算表达式一次,并将相同的值赋给每个实例的属性。
在一个类构造函数中——MATLAB计算每个实例的赋值表达式,以确保每个实例有一个唯一的值。
有关指定为属性默认值的表达式的求值的更多信息,请参见当MATLAB计算表达式时.
在一个属性
块时,可以控制单个属性的默认值。将默认值指定为一个值或MATLAB表达式。表达式不能引用变量。例如:
Prop1
-没有赋值结果为空[]
默认值
Prop2
-将字符数组指定为默认值
Prop3
—指定表达式的结果为默认值
Prop4
-将句柄类的同一实例分配给Prop4
此类的所有实例
Prop5
-指定一个满足标量正双精度的指定限制的默认值。
classdef类名属性Prop1 Prop2 =“一些文本”Prop3 = sin(pi/12) Prop4 = containers。mapprop5 (1,1) double {mustBePositive} = 1结束结束
如果类定义未指定默认属性值,则MATLAB将属性值初始化为空双
([]
)。如果该类对属性值指定了任何类、大小或验证函数限制,则该类必须在空值无效时指定有效值,以确保默认值满足这些限制。
属性默认值的计算仅在首次需要该值时发生,并且仅在MATLAB首次初始化该类时发生。MATLAB不会在每次创建该类的实例时重新计算该表达式。
有关指定为属性默认值的表达式的求值的更多信息,请参见类定义中表达式的求值和包含对象的属性.
有关特性定义中使用的类、大小和验证函数的信息,请参见验证属性值.
当MATLAB加载类定义时,只将指定的默认值赋给属性一次。如果使用句柄类构造函数创建属性默认值,MATLAB只在第一次使用该类时调用构造函数,然后在创建的所有对象中使用相同的对象句柄作为属性的默认值。因为所有的对象句柄引用同一对象,所以对一个实例中的句柄对象所做的任何更改都是对所有实例中的句柄对象所做的更改。
如果希望在每次创建类的对象时将属性值初始化为句柄对象的新实例,请在构造函数中指定该属性值。
要从类构造函数中为属性赋值,请参考构造函数返回的对象(输出变量)obj
)以及使用点表示法的属性名称:
classdef类名属性Prop1结束方法函数obj=MyClass(intval)%为每个实例初始化Prop1obj.Prop1=intval;结束结束结束
在类构造函数中指定属性时,MATLAB会对创建的每个对象的赋值语句进行求值。如果希望每个对象包含该属性的唯一值,请在构造函数中指定属性值。
例如,假设您希望在每次创建一个其他对象时为另一个对象的属性分配一个唯一的句柄对象。将句柄对象赋给构造函数中的属性。调用句柄对象构造函数为类的每个实例创建一个唯一的句柄对象。
classdef集装箱属性Prop1结束方法函数objj = containshhandle (keySet,valueSet)Prop1 = MyHandleClass(键盘、valueSet);结束结束结束
有关构造函数方法的更多信息,请参见在构造函数中引用对象.
在构造函数中赋值之前,MATLAB验证属性默认值。必须在中指定默认值属性
块和类构造函数中设置的属性值,以满足指定的验证。例如,此类限制道具
对标量正双精度浮点数,但不指定有效的默认值。默认情况下,MATLAB会指定一个空double的默认值,这会导致运行时错误。
classdefPropInit属性%没有有效默认值的错误Prop (1,1) double {mustBePositive}%空的默认值必须为正结束方法函数obj = PropInit(positiveInput)支持= positiveInput;结束结束结束
调用具有有效值的类构造函数道具
导致验证函数出错肯定是阳性
.
obj = PropInit (2);
使用类“PropInit”的属性“Prop”的隐式默认值时出错:值必须为正。
所有属性都具有修改属性行为某些方面的属性。指定的属性应用于特定特性块中的所有特性。例如:
classdef类名属性(PropertyAttribute=值)Prop1Prop2结束结束
例如,只有同一类定义中的方法才能修改和查询薪水
和密码
属性。
classdef雇员信息属性(访问=私人)工资密码结束结束
存在此限制是因为类在属性
块的通道
属性设置为私有的
.
有关您可以指定的属性的描述,请参见:属性的属性.
MATLAB在设置或查询属性值时调用。中定义属性集访问或获取访问方法方法
不指定属性且具有以下语法的块:
方法函数obj =。属性名(对象,值)。。。结束函数value=get。属性名(obj)…结束结束
当赋值属性定义块中指定的默认值时,MATLAB不调用属性集访问方法。
例如,设置密码
方法测试分配给名为的属性的字符数组的长度密码
.如果分配给属性的值少于7个字符,MATLAB将返回错误。否则,MATLAB将指定的值赋给属性。
函数obj = set.Password (obj, pw)如果numel(pw)<7错误('密码必须至少包含7个字符')其他的obj.Password=pw;结束
有关属性访问方法的详细信息,请参见属性访问方法.
MATLAB可以解析属性名字符
使用以下形式的表达式的变量:
反对(PropertyNameVar)
哪里PropertyNameVar
包含有效对象属性名称的变量。在将属性名作为参数传递时使用此语法。例如,getPropValue函数返回键型
属性:
专有名称=“KeyType”;函数o = getPropValue(obj,PropName) o = obj.(PropName);结束