创建抽象类函数的目的是什么

lok*_*oki 4 delphi

在Delphi中,我经常看到这样的代码:

TmyClass = class
public
   class function getSomething: integer; virtual; abstract;
end;
Run Code Online (Sandbox Code Playgroud)

但是,这样的声明(即类函数)的目的是什么,因为TmyClass.getSomething即使未在子类中实现,调用也总是会失败,因为它没有实现。

Dal*_*kar 8

如果TmyClass.getSomething直接调用,它将失败,但与元类结合使用可能很有用。就像在非类函数上一样,它为您提供了定义抽象API的机会。

例如:

TmyClassClass = class of TMyClass;

TmyClass1 = class(TmyClass)
public
   class function getSomething: integer; override;
end;

var
  c: TmyClassClass;

  c := TmyClass1;
  c.getSomething;
Run Code Online (Sandbox Code Playgroud)

当然,你总是可以在对象实例使用类函数,因此调用getSomethingTMyClass1对象实例会工作,太。