Maison > développement back-end > C++ > Pourquoi la covariance et la contravariation ne fonctionnent-elles pas avec des types de valeur en C #?

Pourquoi la covariance et la contravariation ne fonctionnent-elles pas avec des types de valeur en C #?

Susan Sarandon
Libérer: 2025-01-30 21:16:10
original
160 Les gens l'ont consulté

Why Don't Covariance and Contravariance Work with Value Types in C#?

C # Covariance et contre-lamence: Type de valeur Restrictions

Les fonctionnalités de covariance et de contre-contravariance

C # permettent des affectations de types flexibles. Cependant, ces capacités sont limitées lorsque vous travaillez avec des types de valeur.

IEnumerable<T> présente une covariance, permettant l'attribution d'une référence T à une référence d'objet. Cela ne s'étend pas aux types de valeur, comme illustré:

<code class="language-csharp">IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;  // Compiles fine

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;  // Compilation error</code>
Copier après la connexion

Cette différence découle de la boxe. L'attribution d'un type de valeur à une variable de référence nécessite la boxe: créer un nouvel objet alloué au tas. Cela ajoute des frais généraux et introduit des problèmes d'exécution potentiels.

Avec la covariance, le runtime de langue commune (CLR) ne peut garantir la préservation de l'identité de la valeur en boîte. Par exemple, une méthode acceptant un object[] et modifier un élément ne garantit pas que la valeur en boîte de IEnumerable<int> reste inchangée.

Par conséquent, pour maintenir la sécurité des types et empêcher les erreurs liées à la boxe, la covariance et la contreravariance ne sont pas prises en charge pour les types de valeur en C #.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal