J'ai deux interfaces: plus tard, je suis fondamentalement à l'aide d'un dictionnaire comme ceci: p> 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. P> p>
3 Réponses :
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? P>
Et voici le Entrée MSDN sur la covariance et Contravarariance en génériques . P>
Merci pour le lien MSDN, qui a été utile, on dirait que je devais m'attaquer à mon problème d'une autre manière.
Nope C'est une question de covariance. Si vous pouviez faire:
Dictionary<int, A> dict = new Dictionary<int, B>();
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: maintenant, utilisons votre code: p> C c = new ClassThatImplementsC();
dict.Add(1, c);
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 i> classes, ne feriez aucune différence si vous essayez d'attribuer un dictionnaire code> à un < Code> Dictionnaire code>.
On dirait que je n'utilise même pas 4.0. Tout le monde ici a l'air correct ...