Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

属性特性

属性特性的目的

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

指定属性特性

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 - 该属性只能由定义类的成员访问。

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

使用 AccessSetAccessGetAccess 设置为相同的值。

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

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

Constant

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

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

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

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

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

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

Dependent

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

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

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

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

GetAccess

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

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

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

  • 可以读取此属性的类的列表。将类指定为单个 meta.class 对象或 meta.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 - 该属性只能由构造函数设置。

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

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

有关详细信息,请参阅 类成员访问Properties Containing ObjectsMutable and Immutable Properties

SetObservable

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

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

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

Transient

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

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

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

框架特性

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

属性访问列表

对于 AccessGetAccessSetAccess 特性,您可以使用 meta.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 的访问权限,除非它们显式定义该访问权限。

相关主题