¿Cuál es la diferencia entre <out T>y <T>? Por ejemplo: public interface IExample<out T> { ... } vs. public interface IExample<T> {
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".
¿Cuál es la diferencia entre <out T>y <T>? Por ejemplo: public interface IExample<out T> { ... } vs. public interface IExample<T> {
Si bien podemos heredar de la clase / interfaz base, ¿por qué no podemos declarar un List<> uso de la misma clase / interfaz? interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List<A> listOfA = new...
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...
De Java efectivo por Joshua Bloch, Las matrices difieren del tipo genérico en dos formas importantes. Las primeras matrices son covariantes. Los genéricos son invariantes. Covariante simplemente significa que si X es un subtipo de Y, entonces X [] también será un subtipo de Y []. Las matrices son...
IEnumerable<T>es covariante pero no admite el tipo de valor, solo el tipo de referencia. El siguiente código simple se compila correctamente: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; Pero cambiar de stringa intobtendrá un...
На этот вопрос есть ответы на Stack Overflow на русском : Ковариантность и контрвариантность обобщений Tengo problemas para comprender la diferencia entre covarianza y contravarianza.
Siguiendo con esta pregunta , ¿alguien puede explicar lo siguiente en Scala: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } Entiendo la distinción entre +Ty Ten la declaración de tipo (se compila si la uso T). Pero entonces, ¿cómo se...
Tengo una private readonlylista de LinkLabels ( IList<LinkLabel>). Luego agrego LinkLabels a esta lista y agrego esas etiquetas a un me FlowLayoutPanelgusta de la siguiente manera: foreach(var s in strings) { _list.Add(new
No puedo entender por qué el siguiente código C # no se compila. Como puede ver, tengo un método genérico estático Algo con un IEnumerable<T>parámetro (y Testá restringido a ser una IAinterfaz), y este parámetro no se puede convertir implícitamente a IEnumerable<IA>. Cual es la...
Hoy, leí algunos artículos sobre Covarianza, Contravarianza (e Invarianza) en Java. Leí el artículo de Wikipedia en inglés y alemán, y algunas otras publicaciones de blog y artículos de IBM. ¿Pero todavía estoy un poco confundido sobre de qué se tratan exactamente? Algunos dicen que se trata de la...
No asistí a PDC 2008, pero escuché algunas noticias de que C # 4.0 se anunció para admitir la covarianza y contravarianza genéricas. Es decir, List<string>se puede asignar a List<object>. ¿Cómo es posible? En el libro C # in Depth de Jon Skeet , se explica por qué los genéricos de C #...
¿Qué es un tipo de retorno covariante en Java? ¿En la programación orientada a objetos en
Cerrado . Esta pregunta debe estar más enfocada . Actualmente no acepta respuestas. ¿Quieres mejorar esta pregunta? Actualice la pregunta para que se centre en un solo problema editando esta publicación . Cerrado hace 5 años . Mejora esta pregunta...
EDITAR : reescribió esta pregunta según la respuesta original La scala.collection.immutable.Setclase no es covariante en su parámetro de tipo. ¿Por qué es esto? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s: Set[String] =...
Me encontré con estos en un libro de texto que estoy leyendo en C #, pero tengo dificultades para entenderlos, probablemente debido a la falta de contexto. ¿Existe una buena explicación concisa de qué son y para qué sirven? Edite para aclarar: Interfaz covariante: interface IBibble<out...
Parece que un objeto List no se puede almacenar en una variable List en C #, y ni siquiera se puede convertir explícitamente de esa manera. List<string> sl = new List<string>(); List<object> ol; ol = sl; da como resultado No se puede convertir implícitamente el tipo...
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...
¿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...
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",...
¿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) { }...