这可能是一个简单的答案,我只是遗漏了一些东西,但是这里...如果我有一个Type,(即一个实际的System.Type ......不是一个实例)我该如何判断它继承自另一个特定的基类型?
使用System.Type类的IsSubclassOf方法.
在Type.IsSubTypeOf()
和之间澄清一件事Type.IsAssignableFrom()
:
IsSubType()
true
仅当给定类型是从指定类型派生时才会返回.false
如果给定类型是
指定类型,它将返回.
IsAssignableFrom()
true
如果给定类型是指定类型或从指定类型派生,则将返回.
因此,如果您使用这些来比较BaseClass
和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
编辑:请注意,如果您要查找的基本类型是接口,上述解决方案将失败.以下解决方案适用于任何类型的继承,无论是类还是接口.
// Returns true if "type" inherits from "baseType" public static bool Inherits(Type type, Type baseType) { return baseType.IsAssignableFrom(type) }
(半)来自MSDN文章的有用摘录:
如果[参数]和当前类型表示相同类型,或者当前类型位于[参数]的继承层次结构中,或者当前类型是[参数]实现的接口,或者如果[ argument]是泛型类型参数,当前Type表示[参数]的约束之一.如果这些条件都不为真,或者[参数]是空引用(在Visual Basic中为Nothing),则返回false.