25

这可能是一个简单的答案,我只是遗漏了一些东西,但是这里......如果我有一个类型,(即,一个实际的 System.Type......不是一个实例)我如何判断是否它继承自另一个特定的基本类型?

4

3 回答 3

32

使用System.Type类的IsSubclassOf方法。

于 2008-09-24T19:24:59.177 回答
23

Type.IsSubTypeOf()在and之间需要澄清的一件事Type.IsAssignableFrom()

  • IsSubType()true仅当给定类型派生自指定类型时才会返回。false如果给定类型指定类型,它将返回 。

  • IsAssignableFrom()true如果给定类型是指定类型或派生自指定类型,则将返回。

因此,如果您使用这些来比较BaseClassand DerivedClass(继承自BaseClass),那么:

BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
于 2009-01-30T17:26:30.453 回答
22

编辑:请注意,如果您要查找的基本类型是接口,则上述解决方案将失败。以下解决方案适用于任何类型的继承,无论是类还是接口。

// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
    return baseType.IsAssignableFrom(type)
}

(半) MSDN文章的有用摘录:

如果 [参数] 和当前 Type 表示相同的类型,或者如果当前 Type 在 [参数] 的继承层次结构中,或者如果当前 Type 是 [参数] 实现的接口,或者如果 [the argument] 是泛型类型参数,当前 Type 表示 [the argument] 的约束之一。如果这些条件都不为真,或者 [参数] 为空引用(在 Visual Basic 中为 Nothing),则为 false。

于 2008-09-24T19:24:05.357 回答