如何为类过程声明类型,例如
type
TTest = class
procedure Proc1;
class procedure Proc2;
class procedure Proc3; static;
end;
TProc1 = procedure of object;
TProc2 = ???;
TProc3 = ???;
答案 0 :(得分:11)
TProc2 = procedure of object;
类方法仍然有一个Self
指针。它是类而不是实例。
这样做的一个有趣结果是它提供了一种实现事件处理程序的方法,而无需实例化对象。例如,您可以使用类的类方法,该方法永远不会实例化为为全局Application
对象提供事件处理程序的方法。
TProc3 = procedure;
静态类方法没有Self
指针。它与简单的过程类型兼容。
静态类方法可用作全局范围过程的替代方法。这允许您将此类方法放在类的名称空间中,从而避免污染全局名称空间。
在实现不调用虚拟类方法的静态类方法时要小心。这样的调用在编译时是静态绑定的,因为缺少Self
指针意味着在运行时不能进行动态多态绑定。相反令人失望的是编译器没有对此发出警告,所以你需要保持对你的智慧。