有没有办法在C#3.0中实现泛型类型的协方差?

时间:2010-04-05 13:21:59

标签: generics c#-3.0 covariance

这是在C#4.0中引入的,但有没有办法在c#3.0中实现这一点?

例如,请考虑以下代码:

class Base
{
}

class Derived1 : Base
{
}

class Derived2 : Base
{
}

class User<T> where T : Base
{
}

class User1 : User<Derived1>
{
}

现在,我希望有一个User<T>列表,我可以在其中存储User<Derived1>以及User<Derived2>,但以下代码无法在C#3.0中编译:< / p>

List<User<Base>> users = new List<User<Base>>();
users.Add(new User1());

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

不仅没有好的解决方法,而且您的代码也无法在C#4.0中运行 - 只有接口和委托支持差异,因此您永远无法将User<Derived>视为{{1} }。

答案 1 :(得分:0)

最简单的方法可能是使用ArrayListList<object>并自行处理投射。在C#3中没有优雅的方法。