Как проверить, является ли объект * точно * классом, а не производным? - PullRequest
4 голосов
/ 07 октября 2009

Есть ли способ определить, является ли объект точным классом, а не производным от этого?

Например:

class A : X { }

class B : A { }

Я могу сделать что-то вроде этого:

bool isExactlyA(X obj)
{
   return (obj is A) && !(obj is B);
} 

Конечно, если есть еще производные классы A, я бы добавил и условия.

Ответы [ 4 ]

10 голосов
/ 07 октября 2009

Обобщающий ответ сникера:

public static bool IsExactly<T>(this object obj) where T : class
{
  return obj != null && obj.GetType() == typeof(T);
}

и теперь вы можете сказать

if (foo.IsExactly<Frob>()) ...

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

5 голосов
/ 07 октября 2009

в вашем конкретном экземпляре:

bool isExactlyA(X obj)
{
   return obj.GetType() == typeof(A);
}
2 голосов
/ 07 октября 2009

Понятно ...

control.GetType() ==  typeof(Label)
0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...