我有两节课
class Base
{
}
class Derived : Base
{
}
Base base = new Derived();
没有编译错误
if I do ICollection<Base> collBase = new List<Derived>();
它给出了编译错误。还有其他替代方案可以解决这个问题吗?
如果您使用的是 .Net 版本 4:将 ICollection 更改为 IEnumerable
http://msdn.microsoft.com/en-us/library/dd799517.aspx
编辑-更有用的阅读
http://blogs.msdn.com/b/ericlippert/archive/2007/10/26/covariance-and-contravariance-in-c-part- Five-interface-variance.aspx
http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/default.aspx
试图进一步澄清为什么你不能这样做:
class animal {}
class dog : animal {}
class cat : animal {}
ICollection<animal> dogs = new List<dog>(); //error (Or List<T>, same error) because...
dogs.Add(new cat()); //you just dogged a cat
IEnumerable<animal> dogs = new List<dog>(); // this is ok!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)