ホームページ >バックエンド開発 >C++ >実行時に決定される型引数を使用してジェネリック メソッドを呼び出す方法

実行時に決定される型引数を使用してジェネリック メソッドを呼び出す方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-30 15:36:09730ブラウズ

How to Call a Generic Method with a Runtime-Determined Type Argument?

実行時のみに既知の型引数を使用したジェネリック メソッドの呼び出し

問題: ジェネリック メソッドの動的呼び出し

次のようなジェネリック メソッドを呼び出したいと考えています。実行時まで不明な型引数。たとえば、インターフェイスのリストがあり、各インターフェイスのジェネリック メソッドを呼び出したいとします。

解決策: リフレクション ベースの動的呼び出し

コンパイル時には型引数が不明であるため、現時点では、ジェネリックを使用した従来のメソッド呼び出しは使用できません。代わりに、リフレクションを使用して、実行時に取得した型引数に基づいてジェネリック メソッドを動的に呼び出す必要があります。

このアプローチを実装する方法は次のとおりです。

  1. ジェネリック メソッド: Type.GetMethod を使用してジェネリック メソッドを取得します。
  2. Constructジェネリック型引数: Type.GetTypeArguments を使用してジェネリック型パラメーターを識別します。次に、使用する実際の型引数を表す Type オブジェクトを作成します。
  3. ジェネリック メソッド インスタンスの作成: ジェネリック メソッドで MakeGenericMethod を使用して、指定された型でその特定のインスタンスを作成します。 argument.
  4. Invoke Generic Method: 最後に、作成したジェネリック メソッドに対して Invoke を使用します。

コードの例

// Original Method
public void Method<T>() {
    // Method body
}

// Main Method
var assembly = Assembly.GetExecutingAssembly();
var interfaces = assembly.GetTypes().Where(t => t.Namespace == "MyNamespace.Interfaces");

foreach (var interfaceType in interfaces) {
    MethodInfo genericMethod = typeof(Test).GetMethod("Method");
    MethodInfo specificMethod = genericMethod.MakeGenericMethod(interfaceType);
    specificMethod.Invoke(null, null); // No arguments for this example
}

このアプローチでは、リフレクションを利用することで、実行時に不明な型の引数を使用してジェネリック メソッドを動的に呼び出すことができます。

以上が実行時に決定される型引数を使用してジェネリック メソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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