2011-07-21 5 views
1

J'ai deux classes (MyClass1 et MyClass2) qui héritent toutes deux de MyBaseClass.Classes héritées en tant que paramètre de fonction

Je veux écrire une fonction qui prend une liste de l'une de ces comme paramètre, comme celui-ci

private void DoStuff(List<MyBaseClass> input) 

{ 

... 

} 

Comment puis-je passer une liste à cette fonction?

+1

voulez-vous dire que vous voulez être en mesure d'adopter une liste '' ou '' Liste , ou voulez-vous passer un '' Liste contenant un mélange ou 'MyClass1' et les instances de 'MyClass2'? – LukeH

+0

Je veux être en mesure de transmettre une liste ou une liste

Répondre

6

Vous ne pouvez pas le faire tout à fait comme, List<MyClass1>n'est pas un List<MyBaseClass>. Recherche sur le dépassement de pile pour la variance générique pour des explications de pourquoi c'est le cas.

Une chose que vous pouvez faire est de rendre générique:

private void DoStuff<T>(List<T> input) where T : MyBaseClass 

Alternativement, en C# 4 et .NET 4, si vous avez besoin d'itérer dessus, vous pouvez utiliser IEnumerable<T> qui est covariante dans T:

private void DoStuff(IEnumerable<MyBaseClass> input) 
+0

Je veux être en mesure de transmettre une liste ou une liste

+1

@Zain: Les deux alternatives que je l'ai suggéré vous permettra de le faire. –

+0

Pouvez-vous s'il vous plaît me dire que privé DoStuff (entrée IEnumerable ) quel sera le type de paramètre de cette méthode? –

Questions connexes