使用 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(都只是单个变量)传递给它们各自类型的开放数组参数,而无需将其放在[]
's 之间,并且编译器不会将其直接返回给我吗?
我认为它可能与接口数组甚至涉及的泛型有关,但编译器也接受传递给开放整数数组的整数。