如何检查一个对象是否*正好*一个类,而不是一个派生的类?

时间:2009-10-06 22:59:40

标签: c# inheritance

有什么办法可以确定一个对象是否完全一个类而不是派生的那个?

例如:

class A : X { }

class B : A { }

我可以这样做:

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

当然,如果有更多A的派生类,我必须添加条件。

4 个答案:

答案 0 :(得分:10)

概括窃笑的回答:

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

现在你可以说

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

警告:明智地使用对象的扩展方法。根据您使用此技术的广泛程度,这可能是不合理的。

答案 1 :(得分:5)

在您的具体实例中:

bool isExactlyA(X obj)
{
   return obj.GetType() == typeof(A);
}

答案 2 :(得分:2)

我明白了......

control.GetType() ==  typeof(Label)

答案 3 :(得分:0)