属性语法
本主题描述如何使用 properties...end
模块在 MATLAB® 中定义类属性,并介绍属性验证语法和概念。它还涵盖了从类实例中获取和设置属性值的基础知识。
属性定义代码块
properties
和 end
关键字定义一个或多个具有相同特性设置的类属性。以下是定义属性块的一般语法:
properties (attributes) propName1 ... propNameN end
注意
属性不能与类或该类定义的任何其他成员同名。
例如,下面的属性块定义了两个属性,其中 SetAccess
特性设置为 private
。此特性设置意味着属性值只能由 PrivateProps
类的成员设置。
classdef PrivateProps properties (SetAccess = private) Property1 Property2 end end
还可以为具有不同特性的属性定义多个属性块。在此示例中,一个属性块用私有 SetAccess
定义属性,第二个属性块定义一个抽象属性。具有不同特性的属性块可以任何顺序出现在类定义中。
classdef MultiplePropBlocks properties (SetAccess = private) Property1 Property2 end properties (Abstract) Property3 end end
有关属性特性的完整列表,请参阅属性特性。
属性验证语法
在属性块中,可以使用属性验证。属性验证使您能够对每个属性值(包括大小和类)设置一个或多个限制。您还可以为每个属性定义默认值。属性验证的一般语法是:
properties (attributes) propName1 (dimensions) class {validators} = defaultValue ... end
- 属性值的大小,指定为圆括号中包含两个或更多数字的以逗号分隔的列表,如(dimensions)
(1,2)
或(1,:)
。冒号表示该维度可以包含任意长度。值的维度必须与
完全匹配或兼容。请参阅基本运算的兼容数组大小了解详细信息。(dimensions)
不能包含表达式。(dimensions)
- 属性值的类,指定为类的名称,例如class
double
。该值必须为指定的类或可以转换的类。例如,指定double
的属性接受single
类型的值并将它们转换为double
。除了 MATLAB 中的可用类,您还可以使用自己的类作为属性验证器。对于用户定义的类,属性验证允许指定的
的子类通过而不报错,但不会将该子类转换为超类。class
- 验证函数,指定为用花括号括起来的以逗号分隔的列表,如{validators}
mustBePositive
和mustBeScalarOrEmpty
。与
不同,验证函数不修改属性值。当属性值与其条件不匹配时,验证函数会报错。有关验证函数的列表,请参阅属性验证函数。您也可以定义自己的验证函数。class
- 默认属性值必须符合指定的大小、类和验证规则。默认值也可以是表达式。有关 MATLAB 如何计算默认值表达式的详细信息,请参阅 Define Properties with Default Values。defaultValue
下面的类定义一个属性。属性块未定义显式特性,这等效于定义一个公共属性块。MyPublicData
还必须为由正双精度值组成的向量,其默认值为 [1 1 1]
。
classdef ValidationExample properties MyPublicData (1,:) double {mustBePositive} = [1 1 1] end end
并非所有验证选项都必须同时使用,同一属性块中的不同属性可以使用不同验证器组合。在此示例中,RestrictedByClass
属性仅使用类验证,而 RestrictedByFunction
使用验证函数并赋予默认值。
classdef DifferentValidation properties RestrictedByClass uint32 RestrictedByFunction {mustBeInteger} = 0 end end
有关详细信息,请参阅 Property Class and Size Validation 和 属性验证函数。
属性访问语法
属性访问语法类似于 MATLAB 结构体字段语法。例如,如果 obj
是类的对象,则可以通过引用属性名称来获取属性值。
val = obj.PropertyName
通过将属性引用放在等号的左侧,为属性赋值。
obj.PropertyName = val
例如,实例化 ValidationExample
类并读取 MyPublicData
的值。
classdef ValidationExample properties MyPublicData (1,:) double {mustBePositive} = [1 1 1] end end
x = ValidationExample; x.MyPublicData
ans = 1 1 1
为满足为其定义的验证器的属性赋予新值。
x.MyPublicData = [2 3 5 7];
您可以选择定义在您使用此结构体字段语法时 MATLAB 自动调用的 get 和 set 方法。有关详细信息,请参阅属性 get 和 set 方法。
使用变量引用属性
MATLAB 可以使用以下形式的表达式从 string
或 char
变量解析属性名称:
object.(PropertyNameVar)
PropertyNameVar
是包含有效对象属性名称的变量。将属性名称作为参量传递时,请使用以下语法。例如,getPropValue
函数返回 KeyType
属性的值。
PropName = "KeyType"; function o = getPropValue(obj,PropName) o = obj.(PropName); end