59 votes

L'équivalent C # de Java <? extends Base> en génériques

En Java, je peux faire ce qui suit: (supposons Subclass étend Base ):

 ArrayList<? extends Base> aList = new ArrayList<Subclass>();
 

Quel est l'équivalent en C # .NET? Il n'y a apparemment pas de mot-clé ? extends et cela ne fonctionne pas:

 List<Base> aList = new List<Subclass>();
 

94voto

Raystorm Points 707

En fait il y a un Équivalent(en quelque sorte), l' where mot-clé. Je ne sais pas comment "fermer" il est. J'ai eu une fonction que j'ai besoin de faire quelque chose de similaire pour.

J'ai trouvé une page msdn à ce sujet.

Je ne sais pas si vous pouvez le faire en ligne pour une variable, mais pour une classe que vous pouvez faire:
public class MyArray<T> where T: someBaseClass
ou pour une fonction
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

Je ne l'ai pas vu sur la page, mais en utilisant le " où " mot-clé, il pourrait être possible pour une variable.

8voto

decyclone Points 18778

Examinez Covariance et Contravariance introduits avec .Net 4.0 . Mais cela ne fonctionne qu'avec interfaces ce moment.

Exemple:

 IEnumerable<Base> list = new List<SubClass>();
 

6voto

Mehrdad Points 70493

Il n'y a pas d'équivalent exact (puisque le système de type ne fonctionne pas de la même manière, avec l'effacement de type et tout), mais vous pouvez obtenir des fonctionnalités très similaires avec in et out en utilisant la covariance et la contravariance .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X