¿Por qué los tipos TGeneric <Base> y TGeneric <Descendant> son incompatibles?
Comencé a usar genéricos en Delphi 2010, pero tengo un problema al compilar este fragmento de código:
TThreadBase = class( TThread )
...
end;
TThreadBaseList<T: TThreadBase> = class( TObjectList<T> )
...
end;
TDataProviderThread = class( TThreadBase )
...
end;
TDataCore = class( TInterfacedObject, IDataCore )
private
FProviders: TThreadBaseList<TDataProviderThread>;
...
end;
Luego tengo un procedimiento anidado:
procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;
Y finalmente quiero llamar a este procedimiento anidado en el código de la clase TDataCore:
MakeAllThreadsActive(FProviders);
Pero el compilador no quiere compilarlo y dice (los corchetes '<>' se reemplazan por '()'):
[Error DCC] LSCore.pas (494): Tipos incompatibles E2010: 'TThreadBaseList (TThreadBase)' y 'TThreadBaseList (TDataProviderThread)'
No lo entiendo aunque TDataProviderThread es descendiente de TThreadBase.
Tuve que arreglarlo por encasillamiento duro:
MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));
¿Alguien sabe por qué el compilador dice este error?