"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que a covariância não funciona com tipos de valor em C#?

Por que a covariância não funciona com tipos de valor em C#?

Postado em 2025-03-25
Navegar:969

Why Doesn't Covariance Work with Value Types in C#?

c# covariância e contravariância: restrições de tipo de valor

A interface iEnumerable em C# exibe covariância, permitindo a atribuição de referências de tipo derivado às referências de tipo de base. No entanto, isso não se aplica aos tipos de valor. Atribuindo ienumerable para ienumerable resulta em um erro de compilação.

Esta limitação decorre de boxe e unboxing. O boxe converte um tipo de valor em um tipo de referência ( objeto ), enquanto a unboxing reverte isso. iEnumerable 's parameter t funciona apenas com tipos de referência. Atribuir um ienumerable de um tipo de valor para um ienumerable requer boxe, que não é suportado implicitamente para tipos de valor.

covariância e contravariância dependem da representação de valor consistente nas conversões. Tipos de valor, no entanto, não mantenham essa consistência. O boxe muda sua representação, potencialmente levando à perda e instabilidade da identidade, violando os princípios das tarefas covariantes e contravariantes.

Os escritos de Eric Lippert sobre representação e identidade destacam que essas conversões exigem preservação da identidade. Como o processo de boxe dos tipos de valor quebra essa preservação, eles são incompatíveis com covariância e violação.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3