Я начал использовать generics в 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));
Кто-нибудь знает, почему компилятор говорит об этой ошибке?