发布
社区首页 >问答首页 >类函数/过程和实例函数/过程同名

类函数/过程和实例函数/过程同名
EN

Stack Overflow用户
提问于 2014-10-01 08:26:56
回答 2查看 974关注 0票数 0

考虑一下这门课:

代码语言:javascript
代码运行次数:0
复制
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.

我想使用同名的类函数和实例函数。不幸的是,Delphi不喜欢这样,编译器会阻止这些错误:

代码语言:javascript
代码运行次数:0
复制
[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'

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-01 09:11:30

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

例如,如果您写:

代码语言:javascript
代码运行次数:0
复制
procedure TMyClass.Bar;
begin
  Foo;
end;

然后编译器无法确定您想要调用类方法还是实例方法。

票数 2
EN

Stack Overflow用户

发布于 2014-10-01 08:44:51

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

代码语言:javascript
代码运行次数:0
复制
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.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26137157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档