[英]Covariance and generic types
为什么以下代码为通用案例提供编译错误?
abstract class Test<TItem> where TItem : IFoo
{
public IEnumerable<IFoo> Foos { get; set; }
public void Assign()
{
Foos = GetSomeSpecificList(); // works as expected
Foos = GetSomeGenericList(); // compile error?
}
protected abstract ICollection<TItem> GetSomeGenericList();
protected abstract ICollection<Foo> GetSomeSpecificList();
}
interface IFoo
{
}
class Foo : IFoo
{
}
我错过了什么或不是因为每个TItem都必须是IFoo,因此这个结构不可能违反类型安全吗?
您没有class
约束,因此TItem
可以是实现IFoo
接口的struct
类型。 协方差需要参考类型。 添加class
约束时,它会编译没有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.