这很可能将是一个简单的答案,我只是失去了一些东西,但在这里不用...如果我有一个类型,(也就是实际的System.Type ...不是一个实例)我怎么知道,如果它从另一个特定碱基类型继承?
Answer 1:
使用IsSubclassOf的方法的System.Type类。
Answer 2:
有一两件事之间澄清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
Answer 3:
编辑:请注意,如果你正在寻找的基本类型是一个接口上述方案将失败。 下面的解决方案适用于任何类型的继承工作,无论是类或接口。
// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
return baseType.IsAssignableFrom(type)
}
(半)从有用的提取物MSDN文章:
真,如果[参数]和当前Type表示相同的类型,或者如果当前的类型为[参数]继承层次,或者如果当前类型是[参数]实现,或者如果一个接口[该参数]是一个通用的类型参数和当前Type表示[参数]的约束之一。 假如果这些条件都不为真,或者如果[参数]是一个空引用(Visual Basic中为Nothing)。
文章来源: How do you determine whether or not a given Type (System.Type) inherits from a specific base class (in .Net)?