如何在Delphi中声明类方法的类型?

klu*_*udg 6 delphi methods class

例如,如何为类过程声明类型

type
  TTest = class
    procedure Proc1;
    class procedure Proc2;
    class procedure Proc3; static;
  end;

  TProc1 = procedure of object;
  TProc2 = ???;
  TProc3 = ???;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 10

TProc2 = procedure of object;
Run Code Online (Sandbox Code Playgroud)

类方法仍然有一个Self指针.它是类而不是实例.

这样做的一个有趣结果是它提供了一种实现事件处理程序的方法,而无需实例化对象.例如,您可以使用类的类方法,该方法从未实例化为为全局Application对象提供事件处理程序的方法.

TProc3 = procedure;
Run Code Online (Sandbox Code Playgroud)

静态类方法没有Self指针.它与简单的过程类型兼容.

静态类方法可以用作全局范围过程的替代方法.这允许您将此类方法放在类的名称空间中,从而避免污染全局名称空间.

在实现不调用虚方法方法的静态类方法时要小心.这样的调用在编译时是静态绑定的,因为缺少Self指针意味着在运行时不可能进行动态多态绑定.相反令人失望的是编译器没有对此发出警告,所以你需要保持对你的智慧.