这可能会是一件容易的答案,我只是失去了一些东西,但在这里不...如果我有一个类型,(即,一个实际的系统。类型......不是一个实例)如何告诉我们,如果它继承另一个特定的基础型吗?

有帮助吗?

解决方案

使用 IsSubclassOf 方法href =“http://msdn.microsoft.com/en-us/library/system.type_members.aspx”rel =“noreferrer”> System.Type class。

其他提示

有一点要澄清之间 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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top