【问题标题】:How to check if an object its *exactly* a class, not a derived one?如何检查一个对象是否*完全*一个类,而不是派生类?
【发布时间】: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


    【解决方案1】:

    概括窃笑的答案:

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

    现在你可以说

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

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

    【讨论】:

    • 一个错字。 ----------------------
    • @eric:只需在消息范围内使用一些填充空间来克服最小长度限制:)
    【解决方案2】:

    在您的特定情况下:

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

    【讨论】:

    • typeof 需要类型而不是类
    【解决方案3】:

    我明白了……

    control.GetType() ==  typeof(Label)
    

    【讨论】:

    • 没错。如果你执行 typeof(control),你总是会得到 Control。
    【解决方案4】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2011-06-02
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多