Articles of covarianza

¿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.

Tipos de retorno covariantes c # utilizando generics

¿El código a continuación es la única forma de implementar tipos de retorno covariantes? public abstract class BaseApplication { public T Employee{ get; set; } } public class Application : BaseApplication {} public class NewApplication : BaseApplication {} Deseo poder construir una Aplicación o una Nueva Aplicación y hacer que devuelva el tipo de Empleado […]

todavía confundido acerca de la covarianza y la contravarianza y entrada / salida

ok, leí un poco sobre este tema en stackoverflow, vi esto y esto , pero todavía estoy un poco confundido sobre co / contra-varianza. de aquí La covarianza permite que un tipo “más grande” (menos específico) sea sustituido en una API donde el tipo original solo se usa en una posición de “salida” (por ejemplo, […]

C #: Anulando los tipos de retorno

¿Hay alguna manera de anular los tipos de devolución en C #? Si es así, ¿cómo y si no, por qué y cuál es una forma recomendada de hacerlo? Mi caso es que tengo una interfaz con una clase base abstracta y descendientes de eso. Me gustaría hacer esto (¡vale, no realmente, sino como ejemplo!): […]