Main Content

类组件

类构建块

MATLAB® 将类定义代码组织成模块化代码块,以关键字分隔。所有关键字都有相关联的 end 语句:

  • classdef...end - 所有类组件的定义

  • properties...end - 属性名称声明、属性特性设定、默认值赋值

  • methods...end - 方法签名、方法属性和函数代码的声明

  • events...end - 事件名称和属性的声明

  • enumeration...end - 枚举类的枚举成员和枚举值的声明。

propertiesmethodseventsenumeration 只是 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

所有类定义代码块(classdefpropertiesmethodsevents)都支持特定特性。所有特性都有默认值。请仅在希望更改默认值的情况下指定特性值。

注意

在任何组件代码块中,都请仅指定一次特定特性值。

特性说明

有关受支持的特性的列表,请参阅:

特性值

指定特性值时,这些值会影响在定义代码块中定义的所有组件。用不同的特性设置定义属性需要多个属性代码块。在以逗号分隔的列表中指定多个属性。

properties (SetObservable = true) 
   AccountBalance
end

properties (SetAccess = private, Hidden = true)
   SSNumber
   CreditCardNumber
end

true/false 属性的更简单语法

对于值为 truefalse 的属性,可以使用更简单的语法。属性名称本身意味着 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

例如,以下类定义两个枚举成员,表示逻辑值 falsetrue

classdef Boolean < logical
   enumeration
      No  (0)
      Yes (1)
   end
end

有关详细信息,请参阅定义枚举类

相关信息

创建简单类

包含类定义的文件夹