Sto cercando di implementare chiaro nel seguente codice di esempio in Delphi 2009.Interfacce con Generics - Impostazione di NIL
interface
...
TFoo<T : IInterface> = class(TObject)
FField : T;
procedure Clear;
end;
...
implementation
...
procedure TFoo<T>.Clear;
begin
// Line Below Results In
// E2010 Incompatible types: 'T' and 'Pointer'
FField := nil;
end;
...
ho potuto capire l'errore di tempo complie se "T" non è stato costretto. Ma poiché "T" deve essere un'interfaccia, avrei pensato che questa sintassi avrebbe funzionato con .
C'è via per impostare FField su NIL, quindi l'interfaccia può essere rilasciata?
Ci sono un sacco di problemi con i generici in D2009. La maggior parte di questi dovrebbe essere risolta nel prossimo aggiornamento, ogni volta che viene fuori. Sembra che questo sia uno di quelli. Prova a segnalarlo a QC e, fino a quel momento, questa soluzione è probabilmente la soluzione migliore. –
Piacevolmente sorpreso di vedere che anche il codice di conteggio dei riferimenti è stato emesso. –
@RyanVanIderstine Lo spero! un buon vecchio FField: - nil lo emetterà anche. Si noti che il problema è ancora presente in D2010, risolto in DXE2 + (non ho DXE a portata di mano). –