【发布时间】:2012-11-21 09:43:53
【问题描述】:
使用 Delphi XE-2(已应用所有更新)。
我希望以下代码会在 DoSomething 和 DoInteger 调用上生成编译错误,但事实并非如此。
program OpenArrayQuestion;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
IComposite = interface(IInterface)
['{1AC3CF6A-1316-4838-B67B-9FB075585C1E}']
end;
IComposite<T: IComposite> = interface(IComposite)
['{7F866990-9973-4F8E-9C1F-EF93EF86E8F2}']
end;
function DoSomething(const aData: array of IComposite): Boolean;
begin
Result := True;
end;
function DoInteger(const aData: array of Integer): boolean;
begin
Result := True;
end;
var
FData: IComposite;
FInteger: Integer;
begin
DoSomething(FData);
DoInteger(FInteger);
end.
有人能解释一下为什么我可以将 FData/FInteger(这两个变量都只是单个变量)传递给它们各自类型的开放数组参数,而无需将其放在 [] 之间,并且编译器不会直接向我吐出它吗?
我认为这可能与接口数组,甚至涉及的泛型有关,但编译器也接受传递给开放整数数组的整数。
【问题讨论】:
标签: delphi delphi-xe2 open-array-parameters