首頁 > 後端開發 > C++ > 如何確定 C# 中的類型是否繼承自通用基底類別?

如何確定 C# 中的類型是否繼承自通用基底類別?

Patricia Arquette
發布: 2025-01-24 19:06:10
原創
592 人瀏覽過

How Can I Determine if a Type Inherits from a Generic Base Class in C#?

偵測C#中型別是否繼承自泛型基底類別

在程式設計中,確定類別之間的關係(特別是涉及繼承時)通常是必要的。然而,當處理具有類型參數的泛型類別時,透過標準方法驗證繼承可能會很困難。

問題:

假設您有以下泛型類別和衍生類別:

<code class="language-csharp">public class GenericClass<T> : GenericInterface<T>
{
}

public class Test : GenericClass<SomeType>
{
}</code>
登入後複製

您想要檢查給定的Type物件(例如,typeof(Test))是否表示繼承自GenericClass的類型。但是,使用typeof(Test).IsSubclassOf(typeof(GenericClass))會失敗,因為它沒有考慮泛型類型參數。

解:

為了解決這個問題,您可以使用以下程式碼來確定型別是否衍生自泛型基底類別:

<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (generic == cur) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>
登入後複製

此方法透過遍歷繼承鏈並比較基底類型來決定toCheck是否直接或間接繼承自generic。它透過檢查IsGenericType屬性的存在並檢索泛型類型的定義來處理非泛型類型和泛型類型。

透過這種方法,您可以準確地確定類型是否派生自泛型基類,而不管指定的類型參數是什麼。

使用範例:

<code class="language-csharp">bool result = IsSubclassOfRawGeneric(typeof(GenericClass<>), typeof(Test)); // result will be true</code>
登入後複製

以上是如何確定 C# 中的類型是否繼承自通用基底類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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