enumerazione generici e interfacce
-
10-07-2019 - |
Domanda
Se ha una serie di classi che implementano tutte un'interfaccia.
interface IMyinterface<T>
{
int foo(T Bar);
}
Voglio inserirli tutti in un elenco ed enumerarli.
List<IMyinterface> list
foreach(IMyinterface in list)
// etc...
ma il compilatore vuole sapere cos'è T. Posso farlo? Come posso superare questo problema?
Soluzione
Non esiste un tipo di IMyinterface, esiste solo un tipo di IMyinterface`1 che richiederà un argomento di tipo. È possibile creare un tipo di interfaccia IMy: -
interface IMyinterface { ... }
quindi eredita da esso
interface IMyinterface<T> : IMyinterface { ... }
Dovresti spostare tutti i membri che desideri utilizzare nel ciclo foreach nella definizione IMyinterface.
Altri suggerimenti
Se prevedi di invocare un metodo con T nella firma, la risposta è che non puoi. Altrimenti puoi fare come suggerisce anthonywjones
Devi ancora dire al compilatore che cosa è T in qualche momento, ma solo quello che hai chiesto può essere fatto:
interface IMyinterface
{
int foo<T>(T Bar);
}
List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}