Main Content

属性语法

本主题描述如何使用 properties...end 模块在 MATLAB® 中定义类属性,并介绍属性验证语法和概念。它还涵盖了从类实例中获取和设置属性值的基础知识。

属性定义代码块

propertiesend 关键字定义一个或多个具有相同特性设置的类属性。以下是定义属性块的一般语法:

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} - 验证函数,指定为用花括号括起来的以逗号分隔的列表,如 mustBePositivemustBeScalarOrEmpty。与 class 不同,验证函数不修改属性值。当属性值与其条件不匹配时,验证函数会报错。有关验证函数的列表,请参阅属性验证函数。您也可以定义自己的验证函数。

  • defaultValue - 默认属性值必须符合指定的大小、类和验证规则。默认值也可以是表达式。有关 MATLAB 如何计算默认值表达式的详细信息,请参阅 Define Properties with Default Values

下面的类定义一个属性。属性块未定义显式特性,这等效于定义一个公共属性块。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 可以使用以下形式的表达式从 stringchar 变量解析属性名称:

object.(PropertyNameVar)

PropertyNameVar 是包含有效对象属性名称的变量。将属性名称作为参量传递时,请使用以下语法。例如,getPropValue 函数返回 KeyType 属性的值。

PropName = "KeyType";
function o = getPropValue(obj,PropName)
   o = obj.(PropName);
end

相关主题