【问题标题】:Unable to use a nested generic procedure type in a descendant class as a method's parameter using Delphi XE2?无法使用 Delphi XE2 将后代类中的嵌套泛型过程类型用作方法的参数?
【发布时间】:2014-10-02 04:17:40
【问题描述】:

这是我想要达到的目标:

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 泛型实现的限制吗?

【问题讨论】:

  • 如果将TMyClass.THandler 更改为TGenericClass&lt;TObject&gt;.THandler,或者在TMyClass 中定义一个新的type 别名为TGenericClass&lt;TObject&gt;.THandler,是否也会出现同样的错误?
  • 我建议只使用THandler 没有资格。闻起来像编译器错误。
  • 只使用 THandler 会产生同样的错误
  • 这很奇怪。也许这只是设计的限制。

标签: delphi generics delphi-xe2


【解决方案1】:

尝试这样做,因为 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多