我知道這是舊的,但我仍然不是很瞭解這些問題。誰能告訴我爲什麼以下不起作用(引發runtime
例外)?泛型和鑄造 - 不能將繼承類映射到基類
public abstract class EntityBase { }
public class MyEntity : EntityBase { }
public abstract class RepositoryBase<T> where T : EntityBase { }
public class MyEntityRepository : RepositoryBase<MyEntity> { }
而現在的鑄造生產線:
MyEntityRepository myEntityRepo = GetMyEntityRepo(); // whatever
RepositoryBase<EntityBase> baseRepo = (RepositoryBase<EntityBase>)myEntityRepo;
所以,任何人都可以解釋這是怎麼無效?而且,我沒有心情解釋 - 是否有一行代碼可以用來實際執行此演職員表演?
謝謝大家的答案。爲了簡短 - 我現在用一個基本接口(RepositoryBase:IRepository)解決了這個問題。原來,我只需要執行我得到的實例上的函數,並讓類本身處理其他事情。 –
Jefim
2010-08-20 07:44:48
查看[C#協方差和逆變常見問題](http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx) – 2010-08-20 07:12:49