Je sais que c'est vieux, mais je ne suis toujours pas très bon pour comprendre ces problèmes. Quelqu'un peut-il me dire pourquoi ce qui suit ne fonctionne pas (jette une exception runtime
sur le casting)?Génériques et le casting - ne peut pas attribuer la classe héritée à la classe de base
public abstract class EntityBase { }
public class MyEntity : EntityBase { }
public abstract class RepositoryBase<T> where T : EntityBase { }
public class MyEntityRepository : RepositoryBase<MyEntity> { }
Et maintenant la ligne de coulée:
MyEntityRepository myEntityRepo = GetMyEntityRepo(); // whatever
RepositoryBase<EntityBase> baseRepo = (RepositoryBase<EntityBase>)myEntityRepo;
Alors, quelqu'un peut-il expliquer comment cela est invalide? Et, vous n'êtes pas d'humeur à expliquer - y a-t-il une ligne de code que je peux utiliser pour faire ce casting?
Merci à tous pour les réponses. Pour le rendre court - j'ai maintenant résolu ce problème avec une interface de base (RepositoryBase: IRepository). Il s'avère que j'ai juste besoin d'exécuter les fonctions sur l'instance que je reçois et que la classe elle-même gère d'autres choses. –
Jefim
Consultez la [FAQ sur la covariance et la contravariance C#] (http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx) –