Maison > développement back-end > C++ > Covariance vs Contravariance : en quoi ces concepts diffèrent-ils en programmation ?

Covariance vs Contravariance : en quoi ces concepts diffèrent-ils en programmation ?

Barbara Streisand
Libérer: 2025-01-25 03:01:09
original
728 Les gens l'ont consulté

Covariance vs. Contravariance: How Do These Concepts Differ in Programming?

covariance et contre-avarice: une distinction claire de la programmation

La covariance et la contravariation sont des concepts fondamentaux de la programmation qui définissent comment les relations de type influencent les mappages de fonctions et les types d'entrée / de sortie de structure de données. Essentiellement, la covariance préserve la direction de l'attribution, tandis que la contre-avarice l'inverse.

covariance: maintenir la tâche

illustrons avec des ensembles de types:

<code>{ Animal, Tiger, Fruit, Banana }
{ IEnumerable<Animal>, IEnumerable<Tiger>, IEnumerable<Fruit>, IEnumerable<Banana> }</code>
Copier après la connexion

Le mappage t → ienumerable maintient la affeclabilité. Si Tiger est un sous-type de Animal, alors IEnumerable<Tiger> est également un sous-type de IEnumerable<Animal>. Ceci est courant dans les types de conteneurs, où le sous-type s'applique aux éléments contenus.

Contravariance: affection inverse

Maintenant, considérez ces ensembles de types:

<code>{ IComparable<Tiger>, IComparable<Animal>, IComparable<Fruit>, IComparable<Banana> }</code>
Copier après la connexion

Le mappage t → icomparable inverser la affecté. Si Animal est un supertype de Tiger, alors IComparable<Animal> est un sous-type de IComparable<Tiger>. Ceci est fréquemment observé dans les types fonctionnels, où les types contravariants gèrent les paramètres d'entrée de types spécifiques ou connexes.

Différences clés résumées

La covariance maintient la direction de la tâche; Une valeur de sous-type peut être attribuée à une valeur de supertype dans l'entrée et la sortie de la fonction. En revanche, la contre-attavariation inverse la affecté, permettant une affectation de valeur de supertype à une valeur de sous-type dans le paramètre d'entrée, mais pas dans la sortie.

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!

source:php.cn
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