元类默认参数值(Delphi 2009)

Jon*_*ría 5 delphi metaclass default-arguments

我想在metaclass参数中给出一个默认值:

type
  TMyClass = class
  end;

type
  TMyClassMetaClass = class of TMyClass;

procedure MyProcedure(const AMetaClass: TMyClassMetaClass = TMyClass);
Run Code Online (Sandbox Code Playgroud)

有可能的?在Delphi2009中它给出了错误:E2026预期的常量表达式

Dav*_*nan 6

根据语言规则,元类不是一个常量表达式.所以你最好的选择是使用重载:

procedure MyProcedure(const AMetaClass: TMyClassMetaClass); overload;
procedure MyProcedure; overload;
Run Code Online (Sandbox Code Playgroud)

并在实施中:

procedure MyProcedure(const AMetaClass: TMyClassMetaClass);
begin
  ....
end;  

procedure MyProcedure;
begin
  MyProcedure(TMyClass);
end;
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用默认值`nil`并将`nil`视为你想要的类. (2认同)