Узнайте, есть ли у объекта определенный класс в качестве предка - PullRequest
2 голосов
/ 30 июня 2010

В C # как я могу найти, если у данного объекта есть определенный предок?

Например, скажем, у меня есть следующая структура класса.

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

Если у меня есть такой метод:

 void MyCoolMethod (Form form)

Как мне узнать, происходит ли форма от MyCustomFormType или нет?

Ответы [ 7 ]

8 голосов
/ 30 июня 2010
if (form is MyCustomFormType) {
    // form is an instance of MyCustomFormType!
}
4 голосов
/ 30 июня 2010
if( form is MyCustomFormType)

Если вы собираетесь привести его к этому типу, вы должны использовать оператор as и проверить на ноль.

MyCustomFormType myCustomFormType = form as MyCustomFormType;
if( myCustomFormType != null)
{
   // this is the type you are looking for
}
2 голосов
/ 30 июня 2010

Как добавили любое количество респондентов: через is (или as) операторов.

Однако, желая узнать точный тип, классический кодовый запах . Постарайся не делать этого. Если вы хотите принимать решения на основе точного типа формы, попробуйте вместо этого поместить эту логику в переопределенные виртуальные методы, а не за пределы вашего класса.

0 голосов
/ 30 июня 2010
var myCustomForm = form as MyCustomFormType;
if(myCustomForm != null)
{
    // form was a MyCustomFormType instance and you can work with myCustomForm 
}

Избегайте is, если вы хотите управлять формой как MyCustomFormType.При использовании as вам нужен только один приведение.

0 голосов
/ 30 июня 2010
void MyCoolMethod (Form form) {
  if (form is MyCustomFormType)
    // do your cool stuff here
}
0 голосов
/ 30 июня 2010

Используйте оператор is.

, например

if (form is MyCustomFormType) {
   do whatever
}
0 голосов
/ 30 июня 2010

Оператор is:

bool isOk = form is MyCustomForm;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...