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>
Le mappage t → ienumerable 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>
Le mappage t → icomparable 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!