具有相同名称的类函数/过程和实例函数/过程

时间:2014-10-01 08:26:57

标签: delphi delphi-xe

考虑这个课程:

unit u_myclass;

interface

type
  TMyClass = class
  public
    class function Foo : Integer;
    function Foo : Integer;
  end;

implementation

{ TMyClass }
class function TMyClass.Foo: Integer;
begin
 Result := 10;
end;

function TMyClass.Foo: Integer;
begin
 Result := 1;
end;

end.

我想使用类函数和具有相同名称的实例函数。 可悲的是,德尔福不喜欢这样,编译器会阻止这些错误:

[DCC Error] u_myclass.pas(9): E2252 Method 'Foo' with identical parameters already exists
[DCC Error] u_myclass.pas(20): E2037 Declaration of 'Foo' differs from previous declaration
[DCC Error] u_myclass.pas(9): E2065 Unsatisfied forward or external declaration: 'TMyClass.Foo'

我的问题:这是可能的还是仅仅是一种语言限制(我需要重命名这两种方法中的一种)?

2 个答案:

答案 0 :(得分:2)

我找到的唯一解决方案是使用重载和不同的参数:

unit u_myclass;

interface

type
  TMyClass = class
  public
    class function Foo(A : Integer) : Integer; overload;
    function Foo : Integer; overload;
  end;

implementation

{ TMyClass }
class function TMyClass.Foo(A: Integer): Integer;
begin
 Result := A;
end;

function TMyClass.Foo: Integer;
begin
 Result := 1;
end;

end.

答案 1 :(得分:2)

不可能为实例方法和类方法使用相同的名称。这是不允许的,编译器在某些情况下无法区分它们。

例如,如果你写:

procedure TMyClass.Bar;
begin
  Foo;
end;

然后编译器无法确定是否要调用类方法或实例方法。