可靠地检查C#中的子类关系,包括自类型比较
在C#中确定类型是否为另一种类型的子类,可以使用IsSubclassOf
:
<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
但是,当检查类型与其自身之间的子类关系时,这种方法会失败:
<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
为了解决这个限制,存在几种选择:
Type.IsAssignableFrom:
<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true</code>
虽然此方法对子类返回true,但它也为不相关的类型提供误报,例如:
<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true</code>
is 和 as (对象操作):
这些运算符需要对象而不是类型对象,不能用于比较类型定义:
<code class="language-csharp">// 无法编译: SubClass is BaseClass // 无法编译: typeof(SubClass) is typeof(BaseClass)</code>
自定义方法:
为了准确地检查子类关系,可以创建一个辅助方法:
<code class="language-csharp">public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant) { return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase; }</code>
此方法正确处理子类和相等性比较。
以上是如何可靠地检查 C# 中的子类关系(包括自类型比较)?的详细内容。更多信息请关注PHP中文网其他相关文章!