Ho iniziato a utilizzare dei farmaci generici in Delphi 2010, ma ho un problema quando si compila questo pezzo di codice:Perché i tipi TGeneric <Base> e TGeneric <Descendant> sono incompatibili?
TThreadBase = class(TThread)
...
end;
TThreadBaseList<T: TThreadBase> = class(TObjectList<T>)
...
end;
TDataProviderThread = class(TThreadBase)
...
end;
TDataCore = class(TInterfacedObject, IDataCore)
private
FProviders: TThreadBaseList<TDataProviderThread>;
...
end;
allora ho qualche procedura nidificato:
procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;
E infine voglio chiamare questa procedura nidificato nel codice della classe di TDataCore:
MakeAllThreadsActive(FProviders);
Ma compilatore non vuole compilarlo e dice (' <>' parentesi sono sostituite da '()'):
[DCC errore] LSCore.pas (494): E2010 tipi incompatibili: 'TThreadBaseList (TThreadBase)' e 'TThreadBaseList (TDataProviderThread)'
Non lo capisco anche se TDataProviderThread è discendente di TThreadBase.
ho dovuto risolvere il problema da difficile fusione di caratteri:
MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));
Qualcuno sa perché il compilatore dice che questo errore?
Come altri hanno già spiegato PERCHÉ si ottiene questo errore, provare a rendere MakeAllThreadsActive un metodo di TThreadBaseList per risolvere il problema. –