Maison >développement back-end >C++ >Pourquoi C# 4.0 ne prend-il pas en charge la variance générique pour les classes ?
Restrictions de C# 4.0 sur la variance générique dans les classes
Contrairement aux interfaces, C# 4.0 n'autorise pas la variance générique pour les classes. Cette limitation soulève la question : pourquoi cette restriction ? Quels sont les inconvénients potentiels de l’activation de la variance générique pour les classes ?
Défis avec les classes covariantes
Imaginez une classe covariante, C<T>
. Pour implémenter la covariance, T
devrait être strictement un type de sortie. Cela signifie que la classe ne peut pas avoir de méthodes ou de propriétés prenant T
en entrée. De même, les champs de type T
seraient interdits, car ils fonctionnent essentiellement comme des définisseurs de propriétés.
Applicabilité limitée : structures immuables
La seule application réaliste des classes covariantes serait des structures immuables comme des listes ou des piles. Bien que les classes immuables offrent des avantages, ce cas d'utilisation limité ne justifie pas la surcharge considérable liée à la prise en charge native de la covariance pour les types de classes immuables.
Exemple illustratif : avantages potentiels
Une covariante Stack<T>
pourrait, en théorie, permettre un code comme celui-ci :
<code class="language-csharp">Stack<string> strings = null; strings = strings.Push("hello"); strings = strings.Push("goodbye"); Stack<object> objects = strings; objects = objects.Push(123);</code>
Ici, l'ajout d'un entier à une pile de chaînes serait sécurisé car les structures immuables empêchent les opérations qui compromettent la sécurité des types.
Résumé
Bien que la variance générique pour les classes puisse offrir certains avantages, les contraintes (l'incapacité d'utiliser les paramètres de type de classe comme entrées de méthode ou de propriété) l'emportent sur les avantages. Cela explique son absence dans C# 4.0 et versions ultérieures.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!