L’equivalente di C # di Java in generici

In Java, posso fare quanto segue: (supponi che Subclass estenda Base ):

 ArrayList aList = new ArrayList(); 

Qual è l’equivalente in C # .NET? Non c’è ? extends ? extends parola chiave apparentemente e questo non funziona:

 List aList = new List(); 

In realtà c’è una parola chiave Equivalente (sorta di), where . Non so quanto sia “vicino”. Avevo una funzione per la quale avevo bisogno di fare qualcosa di simile.

Ho trovato una pagina msdn su di esso.

Non so se puoi farlo in linea per una variabile, ma per una class puoi fare:
public class MyArray where T: someBaseClass
o per una funzione
public T getArrayList(ArrayList arr) where T: someBaseClass

Non l’ho visto sulla pagina ma usando la parola chiave where potrebbe essere ansible per una variabile.

Esaminare Covariance e Contravariance introdotte con .Net 4.0 . Ma funziona solo con le interfaces questo momento.

Esempio:

 IEnumerable list = new List(); 

Non esiste un equivalente esatto (dal momento che il sistema di tipi non funziona nello stesso modo, con cancellazione di tipo e tutto), ma è ansible ottenere funzionalità molto simili con in e out usando covarianza e controvarianza .

Se stai cercando due generici di tipo, dai un’occhiata a questo:

  void putAll(Dictionary map) where K1 : K where V1 : V;