如何计算两种类型的继承级别?
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))
命令。
但是有没有办法计算继承级别?例如:
BaseClass
是 BaseClass
的 0 级继承
DClass2
是 BaseClass
的 2 级继承
DClass3
是 DClass2
. 的一级继承
这可以通过使用 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
.
假设我有以下classes和继承:
public class BaseClass{}
public class DClass:BaseClass {}
public class DClass2:DClass {}
public class DClass3:Dclass2 {}
我可以使用
检查DClass*
是 BaseClass
的派生 class
typeof(BaseClass).IsAssignableFrom(typeof(DClass))
命令。
但是有没有办法计算继承级别?例如:
BaseClass
是BaseClass
的 0 级继承
DClass2
是BaseClass
的 2 级继承
DClass3
是DClass2
. 的一级继承
这可以通过使用 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
.