【问题标题】:How to declare type for a class method in Delphi?如何在 Delphi 中为类方法声明类型?
【发布时间】:2014-03-24 08:49:34
【问题描述】:

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

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

  TProc1 = procedure of object;
  TProc2 = ???;
  TProc3 = ???;

【问题讨论】:

    标签: class delphi methods


    【解决方案1】:
    TProc2 = procedure of object;
    

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

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

    TProc3 = procedure;
    

    静态类方法没有Self 指针。它是与普通程序类型兼容的赋值。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多