类组件
类构建块
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
有关详细信息,请参阅定义枚举类。