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

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

Susan Sarandon
發布: 2025-01-09 15:06:47
原創
812 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板