【发布时间】:2010-12-04 10:52:11
【问题描述】:
有什么方法可以确定一个对象是否完全是一个类而不是它的派生类?
例如:
class A : X { }
class B : A { }
我可以这样做:
bool isExactlyA(X obj)
{
return (obj is A) && !(obj is B);
}
当然,如果有更多A 的派生类,我必须添加 and 条件。
【问题讨论】:
标签: c# inheritance
有什么方法可以确定一个对象是否完全是一个类而不是它的派生类?
例如:
class A : X { }
class B : A { }
我可以这样做:
bool isExactlyA(X obj)
{
return (obj is A) && !(obj is B);
}
当然,如果有更多A 的派生类,我必须添加 and 条件。
【问题讨论】:
标签: c# inheritance
概括窃笑的答案:
public static bool IsExactly<T>(this object obj) where T : class
{
return obj != null && obj.GetType() == typeof(T);
}
现在你可以说
if (foo.IsExactly<Frob>()) ...
警告:明智地在对象上使用扩展方法。根据您使用此技术的广泛程度,这可能是不合理的。
【讨论】:
在您的特定情况下:
bool isExactlyA(X obj)
{
return obj.GetType() == typeof(A);
}
【讨论】:
我明白了……
control.GetType() == typeof(Label)
【讨论】: