Maison >développement back-end >C++ >Pourquoi les types de valeur ne sont-ils pas covariants ou contravés en C #?
Le concept de collaboration et d'onduleur permet à d'utiliser un changement collaboratif et d'accepter un super type (par exemple, attribuer
à). Cependant, ce comportement ne s'applique pas au type de valeur, tel que IEnumerable<T>
. IEnumerable<string>
Les documents IEnumerable<object>
soulignent que cette limite est que la variance ne s'applique qu'au principe du type de référence. Afin de comprendre la raison, explorons le concept de boxe et son impact sur la coordination et l'onduleur. IEnumerable<int>
Le type de valeur est stocké directement en mémoire et il n'y a pas de séparation de logo de sa valeur. Lorsque le type de valeur est attribué à la variable de référence, un processus est appelé la boîte. Dans ce processus, le type de valeur est emballé dans un périphérique d'emballage d'objet, qui contient l'emplacement de la mémoire du type de valeur. Ce dispositif d'emballage permet de considérer le type de valeur comme l'objet. Emballage et variance
Afin de faire l'effet de coordination, le CLR doit s'assurer qu'il ne sera pas représenté lorsqu'il est attribué le type de référence au super type. En effet, le code d'utilisation n'a pas besoin de connaître le type exact de l'objet qu'il fonctionne. Cependant, pour le type, il n'y a pas d'emballage d'objet; la valeur est directement stockée en mémoire. Par conséquent, lorsque le type de valeur est affecté à la variable de référence, l'opération d'emballage est requise. Cette opération d'emballage sera représentée par la valeur, introduisant une couche d'indirectabilité.
L'identification et la différence carrée
L'identification est la capacité de maintenir le même identifiant lorsqu'il est attribué l'objet au type de base ou au type dérivé. Dans le changement coordonné, l'identification de l'objet de demande CLR est conservée. Cependant, pour le type de valeur, l'opération d'emballage et de suppression des boîtes peut modifier de manière inattendue l'identification de l'objet. Cela viole les caractéristiques du logo de conversion Synergy.
Par conséquent, afin d'assurer l'efficacité de l'identification et de la référence, le CLR limite uniquement la collaboration et l'onduleur au type de référence.
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!