ホームページ >バックエンド開発 >C++ >C# で型が汎用基本クラスから継承しているかどうかを確認するにはどうすればよいですか?

C# で型が汎用基本クラスから継承しているかどうかを確認するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-24 19:06:10633ブラウズ

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>
解決策:

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>

以上がC# で型が汎用基本クラスから継承しているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。