he empezado a utilizar de los genéricos en Delphi 2010, pero tengo un problema al compilar este pedazo de código:¿Por qué son TGeneric <Base> y TGeneric <Descendant> tipos incompatibles?
TThreadBase = class(TThread)
...
end;
TThreadBaseList<T: TThreadBase> = class(TObjectList<T>)
...
end;
TDataProviderThread = class(TThreadBase)
...
end;
TDataCore = class(TInterfacedObject, IDataCore)
private
FProviders: TThreadBaseList<TDataProviderThread>;
...
end;
entonces tengo algún procedimiento anidado:
procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;
Y por último quiero llamar este procedimiento anidado en el código de la clase TDataCore:
MakeAllThreadsActive(FProviders);
Pero compilador no quieren compilar y dice (' <>' soportes se sustituyen por '()'):
[Error DCC] LSCore.pas (494): E2010 tipos incompatibles: 'TThreadBaseList (TThreadBase)' y 'TThreadBaseList (TDataProviderThread)'
No lo entiendo aunque TDataProviderThread es descendiente de TThreadBase.
tuve que solucionarlo por encasillamiento duro:
MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));
¿Alguien sabe por qué el compilador dice este error?
Como otros ya explicaron POR QUÉ usted obtiene este error, intente hacer que MakeAllThreadsActive un método de TThreadBaseList para solucionarlo. –