主要内容

属性的语法

介绍如何在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中已有的类之外,您还可以使用自己的类作为属性验证器。对于用户定义的类,属性验证允许指定类的子类没有错误地传递,但它不将子类转换为超类。

  • {验证器}-验证函数,指定为逗号分隔的列表,用花括号括起来,例如mustBePositivemustBeScalarOrEmpty.不像,验证函数不会修改属性值。当属性值与其条件不匹配时,验证函数将出错。有关验证函数的列表,请参见属性验证函数.您还可以定义自己的验证函数。

  • defaultValue—默认属性值必须符合指定的大小、类和验证规则。默认值也可以是表达式。看到用默认值定义属性有关MATLAB如何计算默认值表达式的更多信息。

这个类定义了一个属性。属性块没有定义显式的属性,这相当于定义了一个公共属性块。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);结束

相关的话题