2010-06-30 6 views
2

En C#, comment puis-je savoir si un objet donné a un ancêtre spécifique? Par exemple, disons que j'ai la structure de classe suivante:Savoir si un objet a une classe spécifique comme ancêtre

 
ContainerControl 
| 
+----> Form 
      | 
      +--> MyNormalForm 
      | 
      +--> MyCustomFormType 
        | 
        +---> MyCustomForm 

Si j'ai une méthode comme ceci:

void MyCoolMethod (Form form) 

Comment puis-je trouver si la forme descend de MyCustomFormType ou non?

Répondre

8
if (form is MyCustomFormType) { 
    // form is an instance of MyCustomFormType! 
} 
+0

si vous avez également besoin de l'utiliser dans le bloc if, alors var theForm = form comme MyCustomFormType; if (theForm! = null) {} 'fonctionne également. – chakrit

+0

Je me sens boiteux ... Je le savais. Il va être un jour loooooong ..... – Vaccano

0

L'opérateur is:

bool isOk = form is MyCustomForm; 
4
if(form is MyCustomFormType) 

Si vous allez jeter à ce type vous devez utiliser l'opérateur et vérifier null.

MyCustomFormType myCustomFormType = form as MyCustomFormType; 
if(myCustomFormType != null) 
{ 
    // this is the type you are looking for 
} 
+0

Vous gagnez IMO pour le cas d'utilisation pratique. –

0

Utilisez l'opérateur is.

par exemple.

if (form is MyCustomFormType) { 
    do whatever 
} 
0
void MyCoolMethod (Form form) { 
    if (form is MyCustomFormType) 
    // do your cool stuff here 
} 
0
var myCustomForm = form as MyCustomFormType; 
if(myCustomForm != null) 
{ 
    // form was a MyCustomFormType instance and you can work with myCustomForm 
} 

Évitez is si vous souhaitez manipuler la forme comme MyCustomFormType. En utilisant as, vous n'avez besoin que d'un casting.

2

Comme n'importe quel nombre de répondants ont ajouté: grâce aux opérateurs is (ou as).

Toutefois, vouloir connaître le type exact est un classiccode smell. Essayez de ne pas faire ça. Si vous voulez prendre des décisions basées sur le type exact de formulaire, essayez plutôt de mettre cette logique dans les méthodes virtuelles substituées plutôt qu'en dehors de votre classe.

+0

Bon point. La méthode dans laquelle je le mets est en fait une méthode d'extension (ShowDialog2). J'ai besoin de montrer le dialogue différemment en fonction de son ascendance. (Modal vs modeless) – Vaccano

Questions connexes