Maison >développement back-end >C++ >Pourquoi C# 4.0 ne prend-il pas en charge la variance générique pour les classes ?

Pourquoi C# 4.0 ne prend-il pas en charge la variance générique pour les classes ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-12 21:31:45609parcourir

Why Doesn't C# 4.0 Support Generic Variance for 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn