Maison > développement back-end > C++ > Covariance et contravariance en programmation : quelle est la différence ?

Covariance et contravariance en programmation : quelle est la différence ?

DDD
Libérer: 2025-01-20 17:14:12
original
368 Les gens l'ont consulté

Covariance and Contravariance in Programming: What's the Difference?

Comprendre facilement la covariance et la contravariance

Dans la programmation orientée objet, la covariance et la contravariance décrivent la relation entre une classe de base et une classe dérivée. Elles déterminent comment une classe dérivée est traitée comme sa classe de base tout en garantissant la sécurité des types.

Covariance :

Covariance permet de remplacer les types primitifs dans une API qui sont utilisés uniquement comme sorties (par exemple, valeurs de retour) par des types « plus grands » (moins spécifiques). Cela signifie qu'une liste de classes dérivées peut être traitée comme une liste de classes de base. Par exemple :

<code>List<水果> 水果列表 = new List<香蕉>(); // 协变</code>
Copier après la connexion

Converser :

Contravariance permet de remplacer les types primitifs dans une API qui sont utilisés uniquement comme entrées (par exemple, paramètres de méthode) par des types "plus petits" (plus spécifiques). Cela signifie que les paramètres des types de classes de base peuvent être transmis en tant que paramètres des types de classes dérivés. Par exemple :

<code>基类 执行操作(派生类 变量); // 逆变</code>
Copier après la connexion

Termes d'entrée/sortie :

Dans le contexte des génériques, "in" et "out" sont utilisés pour indiquer si le type générique est utilisé comme paramètre d'entrée ou comme valeur de retour.

  • Sortie (out) : Les types génériques sont utilisés uniquement comme valeurs de retour, les relations de covariance sont donc autorisées.
  • Entrée (in) : Les types génériques sont utilisés uniquement comme paramètres de méthode, permettant ainsi la contravariance.

Exemples d'interfaces et génériques :

<code>// 输出
interface IMyInterface<out T>
{
    T MyFunction();
}

// 输入
interface IMyInterface<in T>
{
    void MyFunction(T variable);
}</code>
Copier après la connexion

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