【发布时间】: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<TObject>.THandler,或者在TMyClass中定义一个新的type别名为TGenericClass<TObject>.THandler,是否也会出现同样的错误? -
我建议只使用
THandler没有资格。闻起来像编译器错误。 -
只使用 THandler 会产生同样的错误
-
这很奇怪。也许这只是设计的限制。
标签: delphi generics delphi-xe2