[英]Generics: why won't this compile?
给出以下代码:
class A<T>
{
internal void Add(T obj) { }
}
class C { }
class B<T> where T : C
{
public B()
{
A<T> a = new A<T>();
a.Add(new C());
}
}
对Add
的调用无法编译。 当我先将其转换为T
时,它会执行以下操作:
a.Add((T)new C());
这可能是睡眠不足,但是我在这里想念的是什么?
如果T
为C
类型(请注意B
的约束),那么A<T>
为什么不等于A<C>
呢?
因为如果用D声明B的类型,D是扩展C的类,则添加新的C会违反该类型。
因为T可能是C的子类。
您不能将动物鲍勃= new Fish()添加到列表<长颈鹿>
A.Add()
期望一个T
您给它一个C
只要编译器知道C
是T
。
但这不是您的约束所要表达的。 它只说T
是C
,这是相反的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.