接口和重载指令
以下代码向我抛出编译器错误
E2252 具有相同参数的方法“MyFunction”已经存在
program Project3;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
aMyInterface = interface
function MyFunction(const aSort: Integer; var aEndPoint: Integer): Integer; overload;
function MyFunction(const aSort, aStartingPoint: Integer): Integer; overload;
end;
aMyClass = class(TInterfacedObject, aMyInterface)
function MyFunction(const aSort: Integer; var aEndPoint: Integer): Integer; overload;
function MyFunction(const aSort, aStartingPoint: Integer): Integer; overload;
end;
{ aMyClass }
function aMyClass.MyFunction(const aSort: Integer; var aEndPoint: Integer): Integer;
begin
Result := 1;
end;
function aMyClass.MyFunction(const aSort, aStartingPoint: Integer): Integer;
begin
Result := 1;
end;
begin
end.
我知道函数的每个实例都有两个变量 Integer 类型,但在一个函数中,两个变量都是const ,而在另一个函数中,一个变量一个是const,另一个是var。
为什么这还不足以不被视为相同的参数?
回答
因为重载决议决定是通过考虑调用代码而不是声明来做出的。
假设你这样调用函数:
MyFunction(int1, int2);
你希望被称为哪一个?const 重载还是 var 重载?编译器没有办法做出这个决定。因此,这被认为是模棱两可的。