Articles of covarianza

Obteniendo un vector en una función que espera un vector

Considera estas clases. class Base { … }; class Derived : public Base { … }; esta función void BaseFoo( std::vectorvec ) { … } Y finalmente mi vector std::vectorderived; Quiero pasar derived a la función BaseFoo , pero el comstackdor no me deja. ¿Cómo resuelvo esto, sin copiar todo el vector en un std::vector […]

los parámetros de ref y out en C # y no pueden marcarse como variante

¿Qué significa la statement? De aquí los parámetros ref y out en C # y no pueden marcarse como variante. 1) ¿Significa que no se puede hacer lo siguiente? public class SomeClass: IVariant { public virtual R DoSomething( ref A args ) { return null; } } 2) ¿O significa que no puedo tener lo […]

¿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 […]