首頁 > 後端開發 > C++ > 如何確定類是否從.NET中的通用類繼承?

如何確定類是否從.NET中的通用類繼承?

DDD
發布: 2025-01-24 18:51:10
原創
929 人瀏覽過

How Can I Determine if a Class Inherits from a Generic Class in .NET?

>辨識來自.net 的通用類別的繼承

.NET的繼承機制允許類別擴展基底類別的功能。 在確定繼承時,通用類別增加了一層複雜性,尤其是在處理

>物件時。 當基底類別是通用的時,標準Type的方法不夠。 IsSubclassOf>

挑戰:

考慮此範例:

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

public class TestClass : GenericClass<string> { }</code>
登入後複製
只檢查

>是因為typeof(TestClass).IsSubclassOf(typeof(GenericClass<string>))是一種封閉的通用類型,而不是通用類型的定義。 typeof(GenericClass<string>)

解:

以下輔助函數有效地決定類型是否從

raw

的通用型別定義:>

此函數透過>的基本型別迭代,直到達到
<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type genericType, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        Type currentType = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (genericType == currentType) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>
登入後複製
。對於每種類型,它檢查是否是通用類型。如果是這樣,它將使用

來獲得通用類型定義。 然後,該功能將此原始的通用類型定義與提供的toCheck進行比較。 一場比賽證實了從原始通用類型的繼承。 object> GetGenericTypeDefinition()這種方法正確地識別了從通用類別中的繼承,在這種情況下克服了標準genericType方法的局限性。 您可以使用此函數可靠地確定a

物件是否表示從特定通用類別派生的類別。

以上是如何確定類是否從.NET中的通用類繼承?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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