这可能是一个简单的答案,我只是遗漏了一些东西,但是这里......如果我有一个类型,(即,一个实际的 System.Type......不是一个实例)我如何判断是否它继承自另一个特定的基本类型?
Kilhoffer
问问题
8181 次
3 回答
32
使用System.Type类的IsSubclassOf方法。
于 2008-09-24T19:24:59.177 回答
23
Type.IsSubTypeOf()
在and之间需要澄清的一件事Type.IsAssignableFrom()
:
IsSubType()
true
仅当给定类型派生自指定类型时才会返回。false
如果给定类型是指定类型,它将返回 。IsAssignableFrom()
true
如果给定类型是指定类型或派生自指定类型,则将返回。
因此,如果您使用这些来比较BaseClass
and 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 回答