如何计算两种类型的继承级别?

How to compute the level of inheritance for two types?

假设我有以下classes和继承:

public class BaseClass{}
public class DClass:BaseClass {}
public class DClass2:DClass {}
public class DClass3:Dclass2 {}

我可以使用

检查 DClass*BaseClass 的派生 class
typeof(BaseClass).IsAssignableFrom(typeof(DClass))

命令。

但是有没有办法计算继承级别?例如:

  1. BaseClassBaseClass
  2. 的 0 级继承
  3. DClass2BaseClass
  4. 的 2 级继承
  5. DClass3DClass2.
  6. 的一级继承

这可以通过使用 BaseType:

递归地向上继承树来完成
public static int GetLevelOfInheritance(Type baseType, Type derivedType)
{
    if (baseType == derivedType)
    {
        return 0;
    }
    else if (derivedType == typeof(object) || derivedType == null) 
    {
        throw new ArgumentException("The two types are not related by inheritance!");
    }
    else
    {
        return 1 + GetLevelOfInheritance(baseType, derivedType.BaseType);
    }
}

但是,存在继承关系只是IsAssignableFrom return成立的充分而非必要条件。对于 class 实现的接口、值类型的可空版本或有界泛型类型参数,它也可以 return 为真。

因此在调用此方法之前,您应该检查一种类型是否 inherits 来自另一种类型,而不是 assignable 来自另一种类型,通过使用IsSubclassOf.