2010-04-05 6 views
2

Cela a été introduit en C# 4.0, mais est-il un moyen d'y parvenir en C# 3.0?Existe-t-il un moyen d'obtenir la covariance des types génériques dans C# 3.0?

Pour exemple, considérez le code suivant:

class Base 
{ 
} 

class Derived1 : Base 
{ 
} 

class Derived2 : Base 
{ 
} 

class User<T> where T : Base 
{ 
} 

class User1 : User<Derived1> 
{ 
} 

Maintenant, je voudrais avoir une liste de User<T>, dans laquelle je peux stocker User<Derived1> ainsi que User<Derived2>, mais le code suivant ne parvient pas à compiler C# 3.0:

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

Des idées?

+0

Si vous pouvez y parvenir en C# 3, ils auraient pas eu besoin de l'introduire en C# 4. En outre, il n'y a pas une telle chose comme 3,5 C#. C'est C# 3.0, .NET 3.5. –

+0

@John: Points pris - les deux. : P. Y at-il un travail autour? – nullDev

+0

utiliser F # comme une solution de contournement? :) –

Répondre

2

Non seulement il n'y a pas de bonne solution, mais votre code ne fonctionnera pas non plus en C# 4.0 - seules les interfaces et les délégués supportent la variance, donc vous ne serez jamais capable de traiter un User<Derived> comme User<Base>.

0

L'approche la plus simple est probablement d'utiliser un ArrayList ou List<object> et de gérer vous-même le moulage. Il n'y a pas de façon élégante de le faire en C# 3.

Questions connexes