Articles of covarianza

¿Por qué no comstack el ejemplo, también conocido como ¿cómo funciona (co, contra, y en) la varianza?

A continuación de 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 +T y T en la statement de tipo (comstack si uso T ). Pero entonces, ¿cómo se escribe realmente una clase […]

¿Cómo se implementa la covarianza y contra varianza genéricas en C # 4.0?

No asistí a PDC 2008, pero escuché algunas noticias de que C # 4.0 se anuncia para admitir la covarianza y la contravariancia genéricas. Es decir, List se puede asignar a List . ¿Cómo es posible? En el libro de Jon Skeet, C # in Depth , se explica por qué los generics C # […]

¿Por qué las matrices son covariantes pero los generics son invariables?

De Effective Java por Joshua Bloch, Las matrices difieren del tipo genérico en dos formas importantes. Las primeras matrices son covariantes. Los generics son invariables. Covariante simplemente significa que si X es un subtipo de Y, entonces X [] también será un subtipo de Y []. Las matrices son covariantes. Como una cadena es un […]

¿Apoya C # la covarianza de tipo de retorno?

Estoy trabajando con .NET Framework y realmente quiero poder crear un tipo de página personalizado que use todo mi sitio web. El problema surge cuando bash acceder a la página desde un control. Deseo poder devolver mi tipo específico de página en lugar de la página predeterminada. ¿Hay alguna manera de hacer esto? public class […]

En C #, ¿por qué no se puede almacenar un objeto List en una variable List ?

Parece que un objeto List no se puede almacenar en una variable List en C #, y ni siquiera se puede emitir explícitamente de esa manera. List sl = new List(); List ol; ol = sl; resultados en No se puede convertir implícitamente el tipo System.Collections.Generic.List a System.Collections.Generic.List Y entonces… List sl = new List(); […]

Convertir lista en List

Si bien podemos heredar de la clase base / interfaz, ¿por qué no podemos declarar una List usando 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 […]

Por qué la covarianza y la contravarianza no son compatibles con el tipo de valor

IEnumerable es IEnumerable pero no admite el tipo de valor, solo el tipo de referencia. El código simple a continuación se comstack con éxito: IEnumerable strList = new List(); IEnumerable objList = strList; Pero cambiar de string a int obtendrá un error comstackdo: IEnumerable intList = new List(); IEnumerable objList = intList; El motivo se […]

Problema de varianza de C #: Asignar Lista como Lista

Mire el siguiente ejemplo (parcialmente tomado de MSDN Blog ): class Animal { } class Giraffe : Animal { } static void Main(string[] args) { // Array assignment works, but… Animal[] animals = new Giraffe[10]; // implicit… List animalsList = new List(); // …and explicit casting fails List animalsList2 = (List) new List(); } ¿Es […]