7
votes

C # héritage dans les génériques question

J'ai deux interfaces: xxx

plus tard, je suis fondamentalement à l'aide d'un dictionnaire comme ceci: xxx

c # est dû 't convertir du droit à gauche, même si je le jette. Existe-t-il un moyen d'utiliser des génériques dans C # afin que cela puisse fonctionner? Si je les fais des classes abstraites, cela semble être d'accord mais j'en ai besoin d'interfaces.


5 commentaires

Quelle version de .NET utilisez-vous?


@Dinah: Pourquoi la version-cadre serait-elle une différence dans ce cas?


@Lukeh: Parce que .NET 4.0 a la covariance et la contre-variance qui peuvent résoudre ce problème. Si Dmurph ait cette question malgré l'être sur 4,0, la question serait différente de celle-ci.


@Dinah: C # 4 Variance introduite pour des interfaces génériques et des délégués, pas classes, ne feriez aucune différence si vous essayez d'attribuer un dictionnaire à un < Code> Dictionnaire .


On dirait que je n'utilise même pas 4.0. Tout le monde ici a l'air correct ...


3 Réponses :


11
votes

La fonctionnalité que vous recherchez est ce qui est appelé variance des génériques (covariance et contravariance). Il y a une prise en charge limitée à ce point de départ de .NET Framework 4. Voici un message intéressant: Comment est mise en œuvre de covariance générique et de contre-variance en C # 4.0?

Et voici le Entrée MSDN sur la covariance et Contravarariance en génériques .


1 commentaires

Merci pour le lien MSDN, qui a été utile, on dirait que je devais m'attaquer à mon problème d'une autre manière.



9
votes

Nope C'est une question de covariance. Si vous pouviez faire:

Dictionary<int, A> dict = new Dictionary<int, B>();


0 commentaires

2
votes

Je ne pense pas que vous allez trouver un moyen de trouver votre problème, car la pensée derrière cela semble imparfaite. Pour illustrer, créons une autre interface: xxx pré>

maintenant, utilisons votre code: p>

C c = new ClassThatImplementsC(); 
dict.Add(1, c);


0 commentaires