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
因此,在调用此方法之前,您应该使用。使用属性检查一种类型是否继承另一种类型,而不是可从另一种类型分配。