Main Content

在单独文件中定义方法

类文件夹

您可以在不同于类定义文件的文件中定义类方法,但有某些例外(请参阅必须在 classdef 文件中定义的方法)。

要为类定义使用多个文件,请将类文件放在文件夹中,该文件夹的名称以 @ 字符开头,后跟类的名称(这称为类文件夹)。确保类文件夹的父文件夹位于 MATLAB® 路径上。

如果类文件夹包含在一个或多个命名空间文件夹中,则包含顶层命名空间文件夹的文件夹必须位于 MATLAB 路径上。

例如,文件夹 @MyClass 必须包含文件 MyClass.m(其中包含 classdef 代码块),还包含其他方法和函数(定义在扩展名为 .m 的文件中)。文件夹 @MyClass 可以包含多个文件:

@MyClass/MyClass.m
@MyClass/subsref.m
@MyClass/subsasgn.m
@MyClass/horzcat.m
@MyClass/vertcat.m
@MyClass/myFunc.m

方法文件的类型

MATLAB 将类文件夹中的任何函数文件均视为类的方法。函数文件可以是 MATLAB 代码 (.m)、实时代码文件格式 (.mlx)、MEX 函数(平台相关的扩展名)和 P 代码文件 (.p)。文件的基本名称必须为有效的 MATLAB 函数名称。有效的函数名称以字母字符开头,并且可以包含字母、数字或下划线。

有关将方法定义为 C++ MEX 函数的信息,请参阅Using MEX Functions for MATLAB Class Methods

在函数文件中定义方法

要在类文件夹的单独文件中定义方法,请在一个文件中创建函数。不要在该文件中使用 method-end 关键字。像任何函数一样,用函数名称命名文件。

myFunc.m 文件中,实现以下方法:

function output = myFunc(obj,arg1,arg2)
   % code here
end

为了提高代码可读性,最好在方法块中声明 classdef 文件中的函数签名。您还必须声明函数签名来设置方法属性。如果您没有在 classdef 文件中声明函数签名,则该方法的所有属性都采用其默认值。例如,在 classdef 中没有签名的方法将 Access 设置为 public,将 Sealed 设置为 false,依此类推。

classdef 文件中指定方法特性

如果您需要为在单独的函数文件中定义的方法指定方法特性,请将方法签名包含在 classdef 文件的 methods 代码块中。此方法代码块指定应用于方法的特性。

例如,以下代码显示在 methods 代码块中将 Access 设置为 private 的方法。方法实现位于单独的文件中。不要在 methods 代码块中包含 functionend 关键字。仅包括显示输入和输出参量的函数签名。

classdef MyClass
   methods (Access = private)
      output = myFunc(obj,arg1,arg2)
   end
end

@MyClass 文件夹中名为 myFunc.m 的文件中定义函数:

function output = myFunc(obj,arg1,arg2)
   ...
end

在单独文件中定义静态方法

要创建静态方法,请将方法 Static 属性设置为 true,并在 classdef 文件的静态方法代码块中列出函数签名。在函数名称中包含输入和输出参量。例如:

classdef MyClass
...
   methods (Static)
      output = staticFunc1(arg1,arg2)
      staticFunc2
   end
   ...
end

使用相同的函数签名在单独的文件中定义函数。例如,在文件 @MyClass/staticFunc1.m 中:

function output = staticFunc1(arg1,arg2)
   ...
end

@Myclass/staticFunc2.m 中:

function staticFunc2
   ...
end

必须在 classdef 文件中定义的方法

classdef 文件中定义以下方法。您不能在单独文件中定义这些方法:

  • 类构造函数

  • 所有在其名称中使用圆点的函数,包括:

    • 转换器方法,这些方法必须使用命名空间名称作为类名的一部分,因为类包含在命名空间中

    • 属性 set 和 get 访问方法

相关信息

相关主题