Articles of covarianza

¿Por qué las matrices son invariables, pero las listas son covariantes?

Por ejemplo, ¿por qué val list:List[Any] = List[Int](1,2,3) trabajo, pero val arr:Array[Any] = Array[Int](1,2,3) falla (porque las matrices son invariables). ¿Cuál es el efecto deseado detrás de esta decisión de diseño?

Covarianza de C # en tipos de retorno de subclase

¿Alguien sabe por qué los tipos de retorno covariantes no son compatibles con C #? Incluso cuando se intenta usar una interfaz, el comstackdor se queja de que no está permitida. Vea el siguiente ejemplo. class Order { private Guid? _id; private String _productName; private double _price; protected Order(Guid? id, String productName, double price) { […]

¿Cómo puedo usar tipos de retorno covariantes con punteros inteligentes?

Tengo un código como este: class RetInterface {…} class Ret1: public RetInterface {…} class AInterface { public: virtual boost::shared_ptr get_r() const = 0; … }; class A1: public AInterface { public: boost::shared_ptr get_r() const {…} … }; Este código no se comstack. En el estudio visual aumenta C2555: el tipo de retorno de función virtual […]

¿Es esto un error de covarianza en C # 4?

En el siguiente fragmento de código, esperaba poder convertir implícitamente elements en elements baseElements porque TBase es implícitamente convertible a IBase . public interface IBase { } public interface IDerived : IBase { } public class VarianceBug { public void Foo() where TBase : IBase { IEnumerable elements = null; IEnumerable derivedElements = null; IEnumerable […]

¿Por qué no se puede convertir IEnumerable en IEnumerable ?

¿Por qué la última línea no está permitida? IEnumerable doubleenumerable = new List { 1, 2 }; IEnumerable stringenumerable = new List { “a”, “b” }; IEnumerable objects1 = stringenumerable; // OK IEnumerable objects2 = doubleenumerable; // Not allowed ¿Esto es porque el doble es un tipo de valor que no deriva de un objeto, […]

¿Por qué la Tarea no es covariante?

class ResultBase {} class Result : ResultBase {} Task GetResult() { return Task.FromResult(new Result()); } El comstackdor me dice que no puede convertir implícitamente Task a Task . ¿Alguien puede explicar por qué es esto? Hubiera esperado que la covarianza me permitiera escribir el código de esta manera.

Contradicción explicada

En primer lugar, he leído muchas explicaciones sobre SO y blogs sobre covarianza y contravarianza y un gran agradecimiento a Eric Lippert por producir una serie tan grandiosa sobre Covarianza y Contravarianza . Sin embargo, tengo una pregunta más específica que estoy tratando de entender un poco. Por lo que yo sé, según la explicación […]

Casting List – problema de covarianza / contravarianza

Dado los siguientes tipos: public interface IMyClass { } public class MyClass : IMyClass { } Me pregunto cómo puedo convertir una List en una List ? No estoy del todo claro sobre los temas de covarianza / contravarianza, pero entiendo que no puedo simplemente lanzar la Lista debido a eso. Podría llegar a esta […]

¿Por qué no puedo asignar una Lista a una Lista ?

Definí la siguiente clase: public abstract class AbstractPackageCall { … } También defino una subclase de esta clase: class PackageCall : AbstractPackageCall { … } También hay varias otras subclases de AbstractPackageCall Ahora quiero hacer la siguiente llamada: List calls = package.getCalls(); Pero siempre obtengo esta excepción: Error 13 Cannot implicitly convert type ‘System.Collections.Generic.List’ to […]

¿Alguna forma sencilla de explicar por qué no puedo hacer una lista de animales = nueva lista de matrices ()?

Sé por qué uno no debería hacer eso. Pero ¿hay alguna manera de explicarle a un profano por qué esto no es posible? Puede explicar esto fácilmente a un profano: Animal animal = new Dog(); . Un perro es un tipo de animal, pero una lista de perros no es una lista de animales.