可靠地檢查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中文網其他相關文章!