使用Delphi XE2无法在子类中使用嵌套通用过程类型作为方法的参数?

时间:2014-10-02 04:17:40

标签: delphi generics delphi-xe2

这就是我想要实现的目标:

program Project4;

{$APPTYPE CONSOLE}

type
  TGenericClass<T> = class
  public type
    THandler = procedure(aParam: T);
  end;

  TMyClass = class(TGenericClass<TObject>)
  public
    procedure DoSomething(aHandler: TMyClass.THandler);
  end;

procedure TMyClass.DoSomething(aHandler: TMyClass.THandler); // E2037 Declaration of 'DoSomething' differs from previous declaration
begin
  // code here
end;

begin
end.

汇编失败,错误消息E2037“DoSomething”声明与之前的声明不同。这是Delphi Generics实现的限制吗?

1 个答案:

答案 0 :(得分:3)

尝试这样做是因为THandler在通用基类上。看起来编译器正在努力弄清楚THandler的通用部分。

TMyClass = class(TGenericClass<TObject>)
public
  procedure DoSomething(aHandler: TGenericClass<TObject>.THandler);
end;

procedure TMyClass.DoSomething(aHandler: TGenericClass<TObject>.THandler); 
begin
  // code here
end;