Delphi 是否可以创建一个带有默认参数(元类)的过程?

Delphi 是否可以创建一个带有默认参数(元类)的过程?,delphi,Delphi,此代码: type TMyClass = class(TObject); procedure Foo(AClass: TClass = TMyClass); begin end; 结果: [dcc32错误]应为E2026常量表达式 是否可以创建一个带有默认参数(元类)的过程?来自,重点是: 可以在过程或函数标题中指定默认参数值。默认值仅允许用于类型化常量和值参数。若要提供默认值,请在参数声明结尾使用=符号,后跟与参数类型赋值兼容的常量表达式 那么,什么是常数表达式?这在这里包括:。一些关

此代码:

type
  TMyClass = class(TObject);

procedure Foo(AClass: TClass = TMyClass);
begin
end;
结果:

[dcc32错误]应为E2026常量表达式

是否可以创建一个带有默认参数(元类)的过程?

来自,重点是:

可以在过程或函数标题中指定默认参数值。默认值仅允许用于类型化常量和值参数。若要提供默认值,请在参数声明结尾使用=符号,后跟与参数类型赋值兼容的常量表达式

那么,什么是常数表达式?这在这里包括:。一些关键摘录:

常量表达式是编译器可以在不执行其所在程序的情况下对其求值的表达式。常量表达式包括数字;字符串;真常数;枚举类型的值;特殊常数True、False和nil;以及专门从这些元素构建的表达式,其中包含运算符、类型转换和集合构造函数

这个常量表达式的定义在Delphi的语法规范中有好几个地方使用。初始化全局变量、定义子范围类型、为枚举类型中的值分配序号、指定默认参数值、编写case语句以及声明true和type常量都需要常量表达式

与true常量不同,类型化常量可以保存数组、记录、过程和指针类型的值。类型化常量不能出现在常量表达式中

因此,不可能将元类声明为常量表达式。这意味着你想做的是不可能的

解决方法是使用过程重载:

type
  TMyClass = class(TObject);

procedure Foo(AClass: TClass); overload;
begin
end;

procedure Foo; overload;
begin
  Foo(TMyClass);
end;

谢谢你,大卫。那就超负荷吧!