ホームページ > バックエンド開発 > 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 を比較します。 一致により、生のジェネリック型からの継承が確認されます。

このアプローチは、ジェネリック クラスからの継承を正確に識別し、このシナリオにおける標準の IsSubclassOf メソッドの制限を克服します。 この関数を使用すると、Type オブジェクトが特定のジェネリック クラスから派生したクラスを表すかどうかを確実に判断できます。

以上がクラスが .NET のジェネリック クラスから継承しているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート