2010-04-05 60 views
2

这已经在C#4.0中引入了,但是有没有办法在c#3.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:

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

任何想法?

+0

如果你可以在C#3中实现它,他们不需要在C#4中引入它。此外,没有C#3.5这样的东西。它是C#3.0,.NET 3.5。 – 2010-04-05 13:36:21

+0

@John:积分 - 他们两人。 :P。有没有解决方法? – nullDev 2010-04-05 13:39:15

+0

使用F#作为解决方法? :) – 2010-04-05 13:43:37

回答

2

不仅没有好的解决方法,而且您的代码也不能在C#4.0中工作 - 只有接口和委托支持差异,所以您将永远无法处理User<Derived>作为User<Base>

0

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

相关问题