我已经开始在 Delphi 2010 中使用泛型,但是在编译这段代码时遇到了问题:
TThreadBase = class( TThread )
...
end;
TThreadBaseList<T: TThreadBase> = class( TObjectList<T> )
...
end;
TDataProviderThread = class( TThreadBase )
...
end;
TDataCore = class( TInterfacedObject, IDataCore )
private
FProviders: TThreadBaseList<TDataProviderThread>;
...
end;
然后我有一些嵌套过程:
procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;
最后我想在 TDataCore 类的代码中调用这个嵌套过程:
MakeAllThreadsActive(FProviders);
但是编译器不想编译它,它说('<>'括号被'()'替换):
[DCC 错误] LSCore.pas(494):E2010 不兼容的类型:“TThreadBaseList(TThreadBase)”和“TThreadBaseList(TDataProviderThread)”
虽然 TDataProviderThread 是 TThreadBase 的后代,但我不明白。
我不得不通过硬类型转换来修复它:
MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));
有谁知道为什么编译器会说这个错误?