Sé que esto es antiguo, pero aún no soy muy bueno para comprender esos problemas. ¿Alguien puede decirme por qué lo siguiente no funciona (arroja una excepción runtime
sobre el casting)?Genéricos y casting: no se puede convertir la clase hereditaria a la clase base
public abstract class EntityBase { }
public class MyEntity : EntityBase { }
public abstract class RepositoryBase<T> where T : EntityBase { }
public class MyEntityRepository : RepositoryBase<MyEntity> { }
Y ahora la línea de colada:
MyEntityRepository myEntityRepo = GetMyEntityRepo(); // whatever
RepositoryBase<EntityBase> baseRepo = (RepositoryBase<EntityBase>)myEntityRepo;
Por lo tanto, puede alguien explicar cómo es esto válido? Y, no estoy de humor para explicar, ¿hay alguna línea de código que pueda usar para hacer este reparto?
Gracias a todos por las respuestas. Para abreviar, resolví este problema con una interfaz base (RepositoryBase: IRepository). Resulta que solo necesito ejecutar las funciones en la instancia que obtengo y dejar que la clase maneje otras cosas. –
Jefim
Consulte las [Preguntas frecuentes sobre covarianza y contradicción de C#] (http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx) –