C # s 'equivalente di Java di si estende Base> in farmaci generici
-
12-10-2019 - |
Domanda
In Java, posso effettuare le seguenti operazioni: (assumere Subclass
estende Base
):
ArrayList<? extends Base> aList = new ArrayList<Subclass>();
Qual è l'equivalente in C # .NET? Non v'è alcun ? extends
parola chiave a quanto pare, e questo non funziona:
List<Base> aList = new List<Subclass>();
Soluzione
In realtà c'è un equivalente (o quasi), la parola chiave where
. Io non so come "vicino" che è. Ho avuto una funzione avevo bisogno di fare qualcosa di simile per.
Ho trovato un href="http://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx#csharp_generics_topic4" rel="noreferrer"> pagina su di esso.
Non so se si può fare questo in linea per una variabile, ma per una classe che si possa fare:
public class MyArray<T> where T: someBaseClass
o per una funzione
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass
Non ho visto sulla pagina, ma utilizzando il where
parola chiave potrebbe essere possibile per una variabile.
Altri suggerimenti
Se vuoi in Covariance
e Contravariance
introdotta con .Net 4.0
. Ma funziona solo con interfaces
al momento.
Esempio:
IEnumerable<Base> list = new List<SubClass>();
Non c'è esattamente equivalente (dal momento che il sistema di tipo non funziona in tutto allo stesso modo, con il tipo di cancellazione e tutti), ma è possibile ottenere funzionalità molto simile con in
e out
usando < a href = "http://msdn.microsoft.com/en-us/library/dd233054.aspx" rel = "noreferrer"> covarianza e controvarianza .
Se siete alla ricerca di due farmaci generici tipo, Date un'occhiata a questo:
void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;