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

C# 如何计算两种类型的继承级别?,c#,inheritance,reflection,C#,Inheritance,Reflection,假设我有以下类和继承: public class BaseClass{} public class DClass:BaseClass {} public class DClass2:DClass {} public class DClass3:Dclass2 {} 我可以使用 typeof(BaseClass).IsAssignableFrom(typeof(DClass)) 指挥部 但是有没有一种方法可以计算继承的级别呢?例如: BaseClass是从BaseClass DClass2是从

假设我有以下类和继承:

public class BaseClass{}
public class DClass:BaseClass {}
public class DClass2:DClass {}
public class DClass3:Dclass2 {}
我可以使用

typeof(BaseClass).IsAssignableFrom(typeof(DClass))
指挥部

但是有没有一种方法可以计算继承的级别呢?例如:

  • BaseClass
    是从
    BaseClass
  • DClass2
    是从
    BaseClass
  • DClass3
    是来自
    DClass2
    的1级继承

  • 这可以通过使用
    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
    返回true的充分条件,而不是必要条件。对于类实现的接口、值类型的可空版本或有界泛型类型参数,它也可以返回true

    因此,在调用此方法之前,您应该使用。

    使用属性检查一种类型是否继承另一种类型,而不是可从另一种类型分配。