接口和重载指令
Interfaces and overload directive
下面的代码抛出编译器错误
E2252 Method 'MyFunction' with identical parameters already exists
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.
我知道函数的每个实例都有两个整数类型的变量,但在一个函数中,两个变量都是 const 而在另一个函数中,一个变量是 const 另一个是 var.
为什么这还不足以不被视为相同的参数?
因为重载决策是通过考虑调用代码而不是声明来做出的。
假设您这样调用函数:
MyFunction(int1, int2);
你希望叫哪一个? const 重载还是 var 重载?编译器无法做出该决定。因此,这被认为是模棱两可的。
下面的代码抛出编译器错误
E2252 Method 'MyFunction' with identical parameters already exists
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.
我知道函数的每个实例都有两个整数类型的变量,但在一个函数中,两个变量都是 const 而在另一个函数中,一个变量是 const 另一个是 var.
为什么这还不足以不被视为相同的参数?
因为重载决策是通过考虑调用代码而不是声明来做出的。
假设您这样调用函数:
MyFunction(int1, int2);
你希望叫哪一个? const 重载还是 var 重载?编译器无法做出该决定。因此,这被认为是模棱两可的。