接口和重载指令

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 重载?编译器无法做出该决定。因此,这被认为是模棱两可的。