Preguntas etiquetadas con covariance

La covarianza, la contravarianza y la invariancia describen cómo cambia la jerarquía de herencia de tipos existente cuando se somete a alguna transformación (como el uso dentro de genéricos). Si la transformación mantiene el orden de la jerarquía original, es "covariante". Si lo invierte, es "contravariante". Si lo rompe, es "invariante".

162
Ejemplo de covarianza y contravarianza del mundo real

Tengo algunos problemas para entender cómo usaría la covarianza y la contravarianza en el mundo real. Hasta ahora, los únicos ejemplos que he visto han sido el mismo ejemplo de matriz anterior. object[] objectArray = new string[] { "string 1", "string 2" }; Sería bueno ver un ejemplo que me...

84
¿C # admite la covarianza de tipo de retorno?

Estoy trabajando con el marco .NET y realmente quiero poder crear un tipo de página personalizado que utilice todo mi sitio web. El problema surge cuando intento acceder a la página desde un control. Quiero poder devolver mi tipo específico de página en lugar de la página predeterminada. ¿Hay...

81
C #: invalidar tipos de retorno

¿Hay alguna forma de anular los tipos de retorno en C #? Si es así, ¿cómo, y si no, por qué y cuál es la forma recomendada de hacerlo? Mi caso es que tengo una interfaz con una clase base abstracta y sus descendientes. Me gustaría hacer esto (está bien, no realmente, ¡pero como...

35
¿Qué hace que ValueTuple sea covariante?

Esto se compila correctamente en C # 7.3 (Framework 4.8): (string, string) s = ("a", "b"); (object, string) o = s; Sé que esto es azúcar sintáctico para lo siguiente, que también se compila correctamente: ValueTuple<string, string> s = new ValueTuple<string, string>("a",...

8
C # para cada comportamiento inesperado

¿Por qué el compilador de C # permite que esto se compile y genera una excepción de tiempo de ejecución cuando se ejecuta? class Program { static void Main(string[] args) { IEnumerable<Test> list = new List<Test>() { new Test() }; foreach(IDisposable item in list) { }...