我曾在2010年德爾福使用泛型的開始,但我已經編譯這段代碼時,一個問題:爲什麼TGeneric <Base>和TGeneric <Descendant>不兼容的類型?
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));
有誰知道爲什麼編譯器說這個錯誤?
正如其他人已經解釋了爲什麼你得到這個錯誤,嘗試使MakeAllThreadsActive TThreadBaseList的方法來解決它。 –
2009-11-06 14:27:39