接口和重载指令

以下代码向我抛出编译器错误

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


以上是接口和重载指令的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>