主要内容

属性特性

属性特性的目的

您可以在类定义中指定特性以便为特定目的自定义属性的行为。通过设置特性来控制属性的特征,例如访问权限、数据存储和可见性。子类不继承超类成员特性。

指定属性特性

properties 关键字的同一行为属性特性赋值。

properties (Attribute1 = value1, Attribute2 = value2,...)
   ...
end

例如,定义一个具有 private 访问权限的属性 Data

properties (Access = private)
   Data
end

对于值为 true 的属性,可以使用更简单的语法。属性名称本身意味着 true,在名称中添加逻辑非运算符 (~) 意味着 false。例如,此模块定义抽象属性。

properties (Abstract)
   ...
end

属性特性表

所有属性都支持下表中列出的特性。特性值适用于 properties...end 代码块中定义的所有属性,该代码块用于指定非默认值。未显式定义的属性采用其默认值。

属性特性

特性

其他信息

AbortSet

  • true - 如果新值与当前值相同,则 MATLAB® 不设置属性值或调用 set 方法。

  • false(默认值)- MATLAB 设置属性值,而不考虑当前值。

仅用于句柄类。将 AbortSet 设置为 true 还可以防止触发属性 PreSetPostSet 事件。

有关详细信息,请参阅Assignment When Property Value Is Unchanged

Abstract

  • true - 此属性没有实现,但具体的子类必须在 Abstract 未设置为 true 的情况下覆盖此属性。

  • false(默认值)- 该属性是具体的,不需要在子类中被覆盖。

抽象属性不能定义设置或访问方法。请参阅属性 get 和 set 方法

抽象属性不能定义初始值。

密封类无法定义抽象成员。

Access

  • public(默认值)- 可以从任何代码访问该属性。

  • protected - 可以从定义类或其子类访问该属性。

  • private - 该属性只能由定义类的成员访问。

  • 对此属性进行访问和设置的类的列表。将类指定为单个 matlab.metadata.Class 对象或 matlab.metadata.Class 对象的元胞数组。有关详细信息,请参阅 属性访问列表

使用 AccessSetAccessGetAccess 设置为相同的值。

Access 指定为空元胞数组 {}private 访问权限相同。

有关详细信息,请参阅 类成员访问

Constant

  • true - 该属性在该类的所有实例中具有相同的值。

  • false(默认值)- 属性值可能因实例而异。

子类会继承常量属性,但不能更改常量属性。

常量属性也无法定义为从属属性。

对于常量属性,会忽略 SetAccess 的值。

有关详细信息,请参阅定义具有常量值的类属性

Dependent

  • true - 属性值不存储在对象中。该值在访问属性时计算。

  • false(默认值)- 属性值存储在对象中。

您可以为从属属性定义 set 方法,但 set 方法实际上无法设置该属性的值。它可以采取其他操作,例如设置另一个属性的值。有关示例,请参阅 何时对从属属性使用 set 方法

使用 isequal 测试对象相等性时,不考虑从属属性 get 方法返回的值。

GetAccess

  • public(默认值)- 可以从任何代码读取该属性。

  • protected - 可以从定义类或其子类读取该属性。

  • private - 该属性只能由定义类的成员读取。

  • 可以读取此属性的类的列表。将类指定为单个 matlab.metadata.Class 对象或 matlab.metadata.Class 对象的元胞数组。有关详细信息,请参阅 属性访问列表

GetAccess 指定为空元胞数组 {}private 访问权限相同。

在命令行窗口中,MATLAB 不显示具有 protectedprivate GetAccess 特性的属性的名称和值。

对于属性的 SetAccessGetAccess 特性,所有子类必须与超类指定相同的值。

有关详细信息,请参阅 类成员访问

GetObservable

  • true - 您可以为句柄类属性创建侦听程序。每当查询属性值时,都会调用这些侦听程序。

  • false(默认值)- 侦听程序没有访问此属性的权限。

有关详细信息,请参阅 属性 set 和查询事件

Hidden

  • true - 该属性在属性列表中或调用 getsetproperties 函数的结果中不可见。

  • false(默认值)- 属性可见。

在命令行窗口中,MATLAB 不显示其 Hidden 特性为 true 的属性的名称和值。但是,隐藏的属性在类图查看器中可见。

NonCopyable

  • true - 在复制定义属性值的对象时,不会复制该属性值。

  • false(默认值)- 当复制对象时,同时复制属性值。

您只能在句柄类中将 NonCopyable 设置为 true

有关详细信息,请参阅Exclude Properties from Copy

PartialMatchPriority

正整数 - 定义 getset 方法中使用的部分属性名称匹配的相对优先级。默认值为 1。

仅适用于 matlab.mixin.SetGet 的子类。

有关详细信息,请参阅为属性名称的部分匹配设置优先级

SetAccess

  • public(默认值)- 可以从任何代码设置该属性。

  • protected - 可以从定义类或其子类设置该属性。

  • private - 该属性只能由定义类的成员设置。

  • immutable - 该属性只能在构造函数中设置。

  • 对此属性进行设置的类的列表。将类指定为单个 matlab.metadata.Class 对象或 matlab.metadata.Class 对象的元胞数组。有关详细信息,请参阅 属性访问列表

对于属性的 SetAccessGetAccess 特性,所有子类必须与超类指定相同的值。

有关详细信息,请参阅 类成员访问Properties Containing Objects可变和不可变属性

SetObservable

  • true - 您可以为句柄类属性创建侦听程序。每当设置属性值时,都会调用这些侦听程序。

  • false(默认值)- 侦听程序没有访问此属性的权限。

有关详细信息,请参阅 属性 set 和查询事件

Transient

  • true - 当对象保存到文件或从 MATLAB 发送到另一个程序(如 MATLAB Engine 应用程序)时,属性值不会保存。

  • false(默认值)- 保存对象时会同时保存属性值。

有关详细信息,请参阅 对象的默认保存和加载过程

WeakHandle (自 R2024b 起)

  • true - 该属性包含对句柄对象的弱引用。对一个对象的弱引用不会阻止该对象被删除。

  • false(默认值)- 该属性包含值类对象或对句柄对象的强引用。

定义为 WeakHandle 的属性只接受句柄对象数组作为值。

会用 WeakHandle 特性定义的所有属性都必须使用类验证。支持默认值,但它们必须为空或无效句柄数组。

WeakHandle 可用于包含从 matlab.mixin.indexing.RedefinesParen 继承的类或通过覆盖 subsrefsubsasgn 来自定义索引的类的属性。 (自 R2026a 起)

有关示例和详细信息,请参阅Weak References

框架特性

使用特定框架基类的类具有特定于框架的特性。有关这些特性的信息,请参阅您正在使用的特定基类的文档。

属性访问列表

对于 AccessGetAccessSetAccess 特性,您可以使用 matlab.metadata.Class 实例的列表。例如,此类声明 Prop1Prop2 属性的访问列表。

classdef PropertyAccess
   properties (GetAccess = {?ClassA, ?ClassB})
      Prop1
   end
   properties (Access = ?ClassC)
      Prop2
   end
end

对于 Prop1

  • ClassAClassB 具有对 Prop1 的 get 访问权限。

  • ClassAClassB 的所有子类都具有对 Prop1 的 get 访问权限。

  • 访问列表不能继承,因此 PropertyAccess 的子类没有对 Prop1 的 get 访问权限,除非它们显式定义该访问权限。

对于 Prop2

  • ClassC 有对 Prop2 的 get 和 set 访问权限。

  • ClassC 的所有子类都有对 Prop2 的 get 和 set 访问权限。

  • 访问列表不能继承,因此 PropertyAccess 的子类没有对 Prop2 的访问权限,除非它们显式定义该访问权限。

另请参阅

主题