本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

方法和函数

方法代码块

classdef 代码块内的 methods 代码块中将方法定义为 MATLAB® 函数。构造函数方法与类同名,并返回类的初始化对象。要创建具有该实例独有属性值的对象,请在类构造函数中为属性赋值。用 end 语句终止所有方法函数。

classdef ClassName
   properties
      PropertyName
   end
   methods
      function obj = ClassName(arg1,...)
         obj.PropertyName = arg1;
         ...
      end
      function ordinaryMethod(obj,arg1,...)
         ...
      end
   end
   methods (Static)
      function staticMethod(arg1,...)
         ...
      end
   end
end

方法调用语法

与 C++ 和 Java® 等语言不同的是,MATLAB 中没有传递给所有方法的特殊隐藏类对象。必须将类的对象显式传递给方法。最左边的参数不需要是类对象,参数列表可以有多个对象。MATLAB 调度由主导参数的类定义的方法。有关详细信息,请参阅方法调用

方法在被调用时必须位于 MATLAB 路径上。例如,如果创建一个对象,然后将当前文件夹更改为对方法文件不可见的文件夹,则调用该方法时会出错。

请在您的 MATLAB 代码中始终使用区分大小写的方法名称。

普通方法

使用 MATLAB 函数语法或圆点表示法调用普通方法。例如,假设您有一个定义 ordinaryMethod 的类。传递定义类的对象和任何需要的参数。

classdef MyClass
   methods
      function out = ordinaryMethod(obj,arg1)
      ...
      end
   end
end

使用类的对象 obj 和以下任一语法调用 ordinaryMethod

obj = MyClass;
r = ordinaryMethod(obj,arg1);
r = obj.ordinaryMethod(arg1);

静态方法

静态方法不需要类的对象。要调用静态方法,请在方法名称前加上类名,以便 MATLAB 确定哪个类定义该方法。

classdef MyClass
   methods (Static)
      function out = staticMethod(arg1)
      ...
      end
   end
end

使用语法 classname.methodname 调用 staticMethod

r = MyClass.staticMethod(arg1);

有关不需要其类对象的方法的信息,请参阅静态方法

私有方法

使用 Access 方法属性创建一个私有方法。您不需要使用私有文件夹。

有关方法属性的列表,请参阅方法特性

有关方法的更多详细信息

方法

类相关函数

您可以在包含类定义 (classdef) 的文件中定义不是类方法的函数。在 classdef - end 代码块之外但在与类定义相同的文件中定义局部函数。classdef 文件中定义的函数与局部函数类似。您可以从同一文件的任何位置调用这些函数,但是,它们在您用于定义它们的文件之外不可见。

classdef 文件中的局部函数对于仅在该文件中使用的工具函数非常有用。这些函数可以接受或返回类实例参数,但不会像普通方法中那样是必需的。例如,以下代码在 classdef 代码块之外定义 myUtilityFcn

classdef MyClass
   properties
      PropName
   end
   methods
      function obj = MyClass(arg1)
         obj.PropName = arg1;
      end 
   end 
end % End of classdef

function myUtilityFcn
   ...
end

您还可以创建包函数,这要求在调用这些函数时使用包名称。

如何重载函数和运算符

为您的类重载 MATLAB 函数,方法是定义一个与要重载的函数同名的类方法。在类实例中调用该函数时,MATLAB 会调度该类方法。

您可以通过用适当的名称定义类方法来重载 MATLAB 算术、逻辑、关系和索引运算符。

有关为该类定义的运算的列表,请参阅 handle 类。从 handle 派生的所有类都继承这些方法。

在单独的文件中定义方法的规则

以下规则适用于在单独的文件中定义的方法:

  • 要为在单独文件中定义的方法指定属性,请在 classdef 文件的方法代码块中声明此方法。使用方法代码块指定属性值。

  • 方法代码块中声明的语法(如果使用)必须与方法的 function 行匹配。

  • 该单独文件必须位于类文件夹中。

  • 类构造函数方法必须在 classdef 文件中定义。构造函数不能位于单独的文件中。

  • 必须在 classdef 文件中定义句柄类 delete 方法。delete 方法不能位于单独的文件中。

    所有在其名称中使用圆点的函数都必须在 classdef 文件中定义,包括:

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

    • 属性 set 和 get 访问方法

有关在单独的文件中定义方法的详细信息,请参阅在单独文件中定义方法

相关主题