首頁 >後端開發 >C++ >如何可靠地檢查 C# 中的子類別關係(包括自型別比較)?

如何可靠地檢查 C# 中的子類別關係(包括自型別比較)?

Susan Sarandon
Susan Sarandon原創
2025-01-09 15:06:47759瀏覽

How Can I Reliably Check for Subclass Relationships in C# Including Self-Type Comparisons?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn