c# covarianza e contravarianza: restricciones de tipo de valor
la interfaz ienumerable
en C# exhibe covarianza, lo que permite la asignación de referencias de tipo derivado a referencias de tipo base. Sin embargo, esto no se aplica a los tipos de valor. Asignando IEnumerable
a IEnumerable
resulta en un error de compilación.
Esta limitación proviene del boxeo y la unboxing. El boxeo convierte un tipo de valor en un tipo de referencia ( objeto
), mientras el Unboxing invierte esto. IEnumerable
'El parámetro de tipo t
solo funciona con tipos de referencia. Asignación de un IEnumerable
de un tipo de valor a un IEnumerable
requiere el boxeo, que no es compatible implícitamente para los tipos de valor.
covarianza y contravarianza dependen de una representación de valor consistente entre las conversiones. Sin embargo, los tipos de valor no mantienen esta consistencia. El boxeo cambia su representación, potencialmente conduciendo a la pérdida de identidad e inestabilidad, violando los principios de las asignaciones covariantes y contravariantes.
Los escritos de Eric Lippert sobre representación e identidad destacan que estas conversiones exigen preservación de identidad. Debido a que el proceso de boxeo de los tipos de valor rompe esta preservación, son incompatibles con covarianza y contravarianza.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3