属性的语法
介绍如何在MATLAB中定义类属性®使用属性结束……
块,并介绍属性验证语法和概念。它还涵盖了从类实例获取和设置属性值的基础知识。
属性定义块
的属性
和结束
关键字定义一个或多个具有相同属性设置的类属性。这是定义属性块的通用语法:
属性(属性)propName1...propNameN结束
请注意
属性不能与类或类定义的任何其他成员具有相同的名称。
属性块定义了两个属性SetAccess
属性设置为私人
.属性的成员可以设置属性值PrivateProps
类。
classdefPrivateProps属性(SetAccess = private) Property1 Property2结束结束
您还可以为具有不同属性的属性定义多个属性块。在本例中,一个properties块定义了带有private的属性SetAccess
,第二个块定义了一个抽象属性。具有不同属性的属性块可以在类定义中以任何顺序出现。
classdefMultiplePropBlocks属性(SetAccess = private) Property1 Property2结束属性(抽象)Property3结束结束
有关属性属性的完整列表,请参见属性的属性.
属性验证语法
在属性块中,可以使用属性验证。属性验证使您能够对每个属性值(包括大小和类)设置一个或多个限制。您还可以为每个属性定义一个默认值。属性验证的一般语法是:
属性(属性)propName1(维)类{validators} = defaultValue...结束
-属性值的大小,指定为用逗号分隔的两个或多个数字的列表,括号括起来,例如(尺寸)
(1、2)
或(: 1)
.冒号允许该维度中的任何长度。值的维度必须匹配
完全或相容。看到基本操作的兼容数组大小获取更多信息。(尺寸)
不能包含表达式。(尺寸)
-类的属性值,指定为类的名称,如类
双
.必须为指定的类或可转换的类。例如,指定双
接受类型的值单
并将它们转换为双
.除了MATLAB中已有的类之外,您还可以使用自己的类作为属性验证器。对于用户定义的类,属性验证允许指定类的子类
没有错误地传递,但它不将子类转换为超类。类
-验证函数,指定为逗号分隔的列表,用花括号括起来,例如{验证器}
mustBePositive
和mustBeScalarOrEmpty
.不像
,验证函数不会修改属性值。当属性值与其条件不匹配时,验证函数将出错。有关验证函数的列表,请参见属性验证函数.您还可以定义自己的验证函数。类
—默认属性值必须符合指定的大小、类和验证规则。默认值也可以是表达式。看到用默认值定义属性有关MATLAB如何计算默认值表达式的更多信息。defaultValue
这个类定义了一个属性。属性块没有定义显式的属性,这相当于定义了一个公共属性块。MyPublicData
也必须是一个正double的向量,它的默认值是[1 1 1]
.
classdefValidationExample属性MyPublicData(1,:) double {mustBePositive}= [1 1 1]结束结束
并不是所有的验证选项都必须一次使用,同一块中的不同属性可以使用不同的验证器组合。在本例中,RestrictedByClass
属性仅使用类验证,而RestrictedByFunction
使用验证函数并指定默认值。
classdefDifferentValidation属性RestrictedByClassuint32RestrictedByFunction{mustBeInteger}= 0结束结束
属性访问语法
属性访问语法类似于MATLAB结构字段语法。例如,如果obj
类的对象,则可以通过引用属性名获取属性的值。
Val = obj。PropertyName
通过将属性引用放在等号的左边来为属性赋值。
obj。PropertyName=瓦尔
例如,实例化ValidationExample
的值MyPublicData
.
classdefValidationExample属性MyPublicData(1,:) double {mustBePositive}= [1 1 1]结束结束
x = ValidationExample;x.MyPublicData
Ans = 1 11 1
将满足为其定义的验证器的新值赋给属性。
x.MyPublicData = [2 3 5 7];
您可以选择定义get和set方法,当您使用此结构字段语法时,MATLAB会自动调用这些方法。有关更多信息,请参见属性访问方法.
使用变量的引用属性
的函数解析属性名字符串
或字符
变量,使用如下形式的表达式:
对象.(PropertyNameVar)
PropertyNameVar
包含有效对象属性的名称的变量。在将属性名作为参数传递时使用此语法。例如,getPropValue
函数的值KeyType
财产。
PropName =“KeyType”;函数o = getPropValue(obj,PropName) o = obj.(PropName);结束