Génériques et de la coulée - ne peut pas lancer de classe héritée de la classe de base

Je sais que c'est vieux, mais je suis toujours pas très bien avec la compréhension de ces problèmes. Quelqu'un peut-il me dire pourquoi le code suivant ne fonctionne pas (jette un runtime exception sur le casting)?

public abstract class EntityBase { }
public class MyEntity : EntityBase { }

public abstract class RepositoryBase<T> where T : EntityBase { }
public class MyEntityRepository : RepositoryBase<MyEntity> { }

Et maintenant le casting de la ligne:

MyEntityRepository myEntityRepo = GetMyEntityRepo(); //whatever
RepositoryBase<EntityBase> baseRepo = (RepositoryBase<EntityBase>)myEntityRepo;

Donc, quelqu'un peut-il expliquer comment cela est-il invalide? Et, je vous n'êtes pas dans l'humeur pour expliquer - est-il une ligne de code que je peux utiliser pour faire ce casting?

Découvrez C# Covariance et la Contravariance FAQ
Merci à tous pour les réponses. Pour faire court j'ai maintenant résolu ce problème avec une interface de base (RepositoryBase<T> : IRepository). S'avère que j'ai juste besoin pour exécuter les fonctions de l'instance-je laisser la classe se charge lui-même d'autres choses.

OriginalL'auteur Jefim | 2010-08-20