繁体   English   中英

泛型:为什么不编译?

[英]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());

这可能是睡眠不足,但是我在这里想念的是什么?

如果TC类型(请注意B的约束),那么A<T>为什么不等于A<C>呢?

因为如果用D声明B的类型,D是扩展C的类,则添加新的C会违反该类型。

因为T可能是C的子类。

您不能将动物鲍勃= new Fish()添加到列表<长颈鹿>

A.Add()期望一个T 您给它一个C 只要编译器知道CT

但这不是您的约束所要表达的。 它只说TC ,这是相反的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM