2009-08-21 5 views
1

est avec C# et .net 3.5Accepter un ensemble limité de sous-types dans un argument de méthode

Disons que j'ai la méthode suivante:

myMethod(myBaseClass mbc) 

Dans mon projet, toutes les classes suivantes héritent de myBaseClass.

ot1:myBaseClass 
ot2:myBaseClass 
ot3:myBaseClass 
ot4:myBaseClass 

Y a-t-il des trucs qui me permettra d'utiliser myMethod avec OT1 et RE3 mais pas OT2 et OT4, ou dois-je essentiellement surcharger pour chaque type que je veux permettre?

Répondre

5

Une interface. Modifier votre signature de la méthode à

myMethod(ICastableAsMyBaseClass mbc) 

Puis ont OT1 et Ot3 mettre en œuvre ICastableAsMyBaseClass.

+1

Cela n'empêcherait pas les classes ne dérivant pas de MyBaseClass d'implémenter l'interface. Il pourrait le rendre générique comme ça: myMethod (T mbc) où T: MyBaseClass, ICastableAsMyBaseClass – Botz3000

+0

Ce n'est pas une mauvaise idée. – Joel

2

Vous pouvez vérifier la classe de mbc au moment de l'exécution, mais cela ne vous empêcherait évidemment pas d'appeler la méthode au mauvais moment lors de la compilation.

Si vous voulez une vérification de typage à la compilation, vous devez surcharger la méthode pour chaque type que vous voulez autoriser.

+0

Avec cette solution particulière, vous pouvez simplement déléguer les deux constructeurs à un constructeur privé qui prend le type de base. Vous obtenez maintenant la sécurité en temps de compilation et n'avez pas à dupliquer le constructeur. –

Questions connexes