找出一个对象是否具有特定的类作为祖先

时间:2010-06-30 15:31:24

标签: c# inheritance

在C#中,如何查找给定对象是否具有特定的祖先?

例如,假设我有以下类结构。

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

如果我有这样的方法:

 void MyCoolMethod (Form form)

如何找到表单是否来自MyCustomFormType?

7 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

if( form is MyCustomFormType)

如果要将其强制转换为该类型,则应使用as运算符并检查是否为空。

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

答案 2 :(得分:2)

正如任意数量的受访者通过is(或as)运营商添加的那样。

但是,想要找出确切的类型是classic code smell。尽量不这样做。如果您想根据表单的确切类型做出决策,请尝试将该逻辑放在重写的虚拟方法中,而不是在类外。

答案 3 :(得分:0)

is运算符:

bool isOk = form is MyCustomForm;

答案 4 :(得分:0)

使用is运算符。

e.g。

if (form is MyCustomFormType) {
   do whatever
}

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

如果要将表单作为MyCustomFormType进行操作,请避免使用is。通过使用as,您只需要一个演员。