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 […]
¿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 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?
¿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) { […]
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 […]
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é 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, […]
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.
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 […]
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 […]