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.
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