ホームページ > バックエンド開発 > C++ > リフレクションを使用して C# で動的型引数を持つジェネリック メソッドを呼び出す方法

リフレクションを使用して C# で動的型引数を持つジェネリック メソッドを呼び出す方法

Barbara Streisand
リリース: 2025-01-03 14:19:40
オリジナル
677 人が閲覧しました

How to Invoke Generic Methods with Dynamic Type Arguments in C# using Reflection?

動的型引数を使用したジェネリック メソッドの呼び出し

C# では、実行時のみに知られる型引数を使用してジェネリック メソッドを呼び出すには、リフレクション機能を利用する必要があります。元の課題には、特定の名前空間内のインターフェイスをループし、これらのインターフェイスを引数として使用して汎用メソッドを呼び出すことが含まれていました。

これを克服するには、次の手順に従います。

  1. ジェネリック メソッド: Type.GetMethod を使用してジェネリック メソッドを取得します
  2. メソッドをジェネリックにする: MakeGenericMethod を使用して、目的の型のジェネリック メソッドの特殊なバージョンを作成します。
  3. メソッドを呼び出す: 生成されたメソッドで Invoke を呼び出して実行します。

たとえば、次のように考えます。次のコード:

// Get the generic method
MethodInfo method = typeof(Test).GetMethod("CallMe");

// Get the list of interfaces in the specified namespace
var types = typeof(Test).Assembly
    .GetTypes()
    .Where(t => t.Namespace == "Interfaces");

// Loop through the interfaces
foreach (Type type in types)
{
    // Create a specialized generic method
    MethodInfo genericMethod = method.MakeGenericMethod(type);

    // Invoke the method with no target or arguments
    genericMethod.Invoke(null, null);
}
ログイン後にコピー

この例では、「CallMe」ジェネリック メソッドを取得し、インターフェイス タイプごとに特殊なバージョンを作成し、それらをリフレクティブに呼び出します。

注: インターフェイスが扱っている型自体がジェネリックであるため、MakeGenericMethod の代わりに MakeGenericType を使用し、適切な型引数を渡します。

以上がリフレクションを使用して C# で動的型引数を持つジェネリック メソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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