你如何确定给定类型(的System.Type)是否从一个特定的基类(在.net中)继承?(How d

2019-08-01 13:25发布

这很可能将是一个简单的答案,我只是失去了一些东西,但在这里不用...如果我有一个类型,(也就是实际的System.Type ...不是一个实例)我怎么知道,如果它从另一个特定碱基类型继承?

Answer 1:

使用IsSubclassOf的方法的System.Type类。



Answer 2:

有一两件事之间澄清Type.IsSubTypeOf()Type.IsAssignableFrom()

  • IsSubType()将返回true只有当给定类型从指定类型的。 它会返回false ,如果给定的类型指定的类型。

  • IsAssignableFrom()将返回true ,如果给定类型是指定的类型或从指定的类型的。

所以,如果你使用的是这些比较BaseClassDerivedClass (从继承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)?