可能重复:
Why isn't there generic variance for classes in C# 4.0?
示例:
interface foo<out T> where T : BaseThing { }
编译
class foo<out T> where T : BaseThing { }
没有。
这是不受支持的,还是有某种原因导致它无法正常工作或没有逻辑意义?
编辑:这是我想要做的事,万一有人想知道......
class BaseThing { }
class DerivedThing : BaseThing { }
class foo<out T> where T : BaseThing { }
class bar : foo<DerivedThing> { }
private void test()
{
foo<BaseThing> fooInstance = new bar();
}
答案 0 :(得分:3)
out
修饰符告诉编译器类型参数可以是协变的。这意味着可以更多地使用T类型。由于您使用的是特定类(例如构造的泛型类型),因此只有一个具体类型的实例,因此没有更多派生类型。多个类型可以实现像foo这样的接口,这意味着您正在处理可能不同类型的T,在这种情况下,这些T类型中的一个可能更加派生。