开发者

Find out if a object has a specific class as an ancestor

In C#, how can I find if a given object has a specific ancestor?

For example, say I have the following class structure.

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

If I have a method like this:

 v开发者_开发百科oid MyCoolMethod (Form form)

How do I find if form descends from MyCustomFormType or not?


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


if( form is MyCustomFormType)

If you are going to cast it to that type you should use the as operator and check for null.

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


As any number of respondents have added: through the is (or as) operators.

However, wanting to find out the exact type is a classic code smell. Try not to do that. If you want to make decisions based on the exact type of form, try instead to put that logic in overridden virtual methods rather than outside your class.


The is operator:

bool isOk = form is MyCustomForm;


Use the is operator.

e.g.

if (form is MyCustomFormType) {
   do whatever
}


void MyCoolMethod (Form form) {
  if (form is MyCustomFormType)
    // do your cool stuff here
}


var myCustomForm = form as MyCustomFormType;
if(myCustomForm != null)
{
    // form was a MyCustomFormType instance and you can work with myCustomForm 
}

Avoid is if you want to manipulate the form as a MyCustomFormType. By using as, you only need one cast.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜