类组件
类构建块
MATLAB® 将类定义代码组织成模块化代码块,以关键字分隔。所有关键字都有相关联的 end
语句:
classdef...end
- 所有类组件的定义properties...end
- 属性名称声明、属性特性设定、默认值赋值methods...end
- 方法签名、方法属性和函数代码的声明events...end
- 事件名称和属性的声明enumeration...end
- 枚举类的枚举成员和枚举值的声明。
properties
、methods
、events
和 enumeration
只是 classdef
代码块内的关键字。
类定义代码块
classdef
代码块包含文件中的类定义,以 classdef
关键字开头,以 end
关键字结尾。
classdef (ClassAttributes) ClassName < SuperClass ... end
例如,以下 classdef
定义名为 MyClass
的类,该类是 handle
类的子类。此类也定义为密封类,因此无法从此类继承。
classdef (Sealed) MyClass < handle ... end
有关更多语法信息,请参阅 classdef
。
属性代码块
properties
代码块包含属性定义,包括可选的初始值。对每组唯一属性设定使用一个单独的代码块。每个属性代码块以 properties
关键字开始,以 end
关键字结束。
properties (PropertyAttributes) PropertyName size class {validators} = DefaultValue end
例如,此类使用默认值定义类型为 double
的私有属性 Prop1
。
classdef MyClass properties (SetAccess = private) Prop1 double = 12 end ... end
有关详细信息,请参阅Initialize Property Values。
方法代码块
methods
代码块包含类方法的函数定义。对每组唯一属性设定使用一个单独的代码块。每个方法代码块以 methods
关键字开始,以 end
关键字结束。
methods (MethodAttributes) function obj = MethodName(arg1,...) ... end
例如,此类定义受保护方法 MyMethod
。
classdef MyClass methods (Access = protected) function obj = myMethod(obj,arg1) ... end end end
有关详细信息,请参阅方法语法。
MATLAB 与 C++ 和 Java® 等语言的不同之处在于您必须将类的对象显式传递给方法。
使用 MyClass
示例,使用类的对象 obj
以及函数或圆点语法调用 MyMethod
:
obj = MyClass; r = MyMethod(obj,arg1); r = obj.MyMethod(arg1);
有关详细信息,请参阅方法调用。
事件代码块
events
代码块(每个唯一的属性设定集对应一个)包含该类声明的事件的名称。events
代码块以 events
关键字开始,以 end
关键字结束。
classdef ClassName events (EventAttributes) EventName end ... end
例如,以下类定义名为 StateChange
的事件,ListenAccess
设置为 protected
。
classdef EventSource events (ListenAccess = protected) StateChanged end ... end
有关详细信息,请参阅事件。
特性设定
特性语法
特性可修改类和类组件(属性、方法和事件)的行为。特性使您能够定义有用的行为,而无需编写复杂的代码。例如,您可以通过将属性的 SetAccess
特性设置为私有,但将其 GetAccess
特性保留为公共来创建只读属性。
properties (SetAccess = private) ScreenSize = getScreenSize end
所有类定义代码块(classdef
、properties
、methods
和 events
)都支持特定特性。所有特性都有默认值。请仅在希望更改默认值的情况下指定特性值。
注意
在任何组件代码块中,都请仅指定一次特定特性值。
特性说明
有关受支持的特性的列表,请参阅:
特性值
指定特性值时,这些值会影响在定义代码块中定义的所有组件。用不同的特性设置定义属性需要多个属性代码块。在以逗号分隔的列表中指定多个属性。
properties (SetObservable = true) AccountBalance end properties (SetAccess = private, Hidden = true) SSNumber CreditCardNumber end
true
/false
属性的更简单语法
对于值为 true
或 false
的属性,可以使用更简单的语法。属性名称本身意味着 true,在名称中添加逻辑非运算符 (~) 意味着 false。例如,以下两种定义静态方法代码块的方式是等效的。
methods (Static) ... end methods (Static = true) ... end
同样,以下三种定义非静态方法代码块的方式也是等效的。所有采用逻辑值的属性的默认值都为 false
,因此您可以通过省略该属性来获取默认行为。
methods ... end methods (~Static) ... end methods (Static = false) ... end
枚举类
枚举类是一种特化类,用于定义代表单个类型值的固定名称集。枚举类使用 enumeration
代码块来包含该类所定义的枚举成员。
枚举代码块以 enumeration
关键字开始,以 end
关键字结束。
classdef ClassName < SuperClass enumeration EnumerationMember end ... end
例如,以下类定义两个枚举成员,表示逻辑值 false
和 true
。
classdef Boolean < logical enumeration No (0) Yes (1) end end
有关详细信息,请参阅定义枚举类。