这是在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());
有什么想法吗?
答案 0 :(得分:2)
不仅没有好的解决方法,而且您的代码也无法在C#4.0中运行 - 只有接口和委托支持差异,因此您永远无法将User<Derived>
视为{{1} }。
答案 1 :(得分:0)
最简单的方法可能是使用ArrayList
或List<object>
并自行处理投射。在C#3中没有优雅的方法。