2010-04-05 109 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中沒有優雅的方法。

相關問題