考虑这个课程:
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'
我的问题:这是可能的还是仅仅是一种语言限制(我需要重命名这两种方法中的一种)?
答案 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;
然后编译器无法确定是否要调用类方法或实例方法。