【发布时间】:2012-12-21 10:00:50
【问题描述】:
很简单,为什么这段代码编译失败?
public interface IWorld { }
public class Foo<T> where T : IWorld { }
public void Hello<T>(T t) where T : IWorld
{
Foo<IWorld> bar1 = new Foo<T>(); //fails implicit cast
Foo<IWorld> bar2 = (Foo<IWorld>)new Foo<T>(); //fails explicit cast
}
由于每个T 都实现IWorld,所以Foo<T> 的每个实例都应该匹配Foo<IWorld>。为什么不?有没有办法解决?我真的不想求助于泛型来实现这一点。
【问题讨论】:
-
值类型可以实现接口。每个值类型都有自己的通用代码实现。
Foo<IWorld>将使用引用类型实现。所以那里有一个类型不匹配。 -
即使
T是一个实现接口的值类型,Foo<T>仍然是一个类,因此是一个引用类型。