ホームページ > バックエンド開発 > C++ > 実行時に決定される型でジェネリック メソッドを呼び出すにはどうすればよいですか?

実行時に決定される型でジェネリック メソッドを呼び出すにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-30 14:53:16
オリジナル
1006 人が閲覧しました

How Can I Call Generic Methods with Runtime-Determined Types?

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

この問題は、コンパイル時に不明な型パラメーターを使用してジェネリック メソッドを呼び出そうとすると発生します。 。通常のメソッド呼び出しはコンパイラによって実行される型安全性チェックに依存しますが、型が実行時にのみ使用できる場合は、代替アプローチが必要になります。

リフレクションベースのソリューション

提供されているコード例のコンテキストでは:

public void Method<T>() where T : class {}
public void AnotherMethod()
{
    ...
    foreach (var interface in interfaces)
    {
        Method<interface>(); // Compile error!
    }
}
ログイン後にコピー

コンパイル時の型をバイパスするにはチェック:

  1. Type.GetMethod を使用してオープン ジェネリック メソッドを取得します:

    MethodInfo method = typeof(Test).GetMethod("Method");
    ログイン後にコピー
  2. 汎用メソッドMakeGenericMethod:

    MethodInfo genericMethod = method.MakeGenericMethod(interface);
    ログイン後にコピー
  3. Invoke:

    genericMethod.Invoke(null, null); // No target or arguments in this case
    ログイン後にコピー

でメソッドを呼び出す完了例

プロセスを明確にするために、次の改訂されたコード サンプルを検討してください。

using System;
using System.Linq;
using System.Reflection;

namespace Sample
{
    interface IFoo { }
    interface IBar { }

    class Program
    {
        public static void CallMe<T>()
        {
            Console.WriteLine("Type of T: {0}", typeof(T));
        }

        static void Main()
        {
            var types = typeof(Program).Assembly.GetTypes().Where(t => t.Namespace == "Sample");

            var methodInfo = typeof(Program).GetMethod("CallMe");

            foreach (var type in types)
            {
                var genericMethodInfo = methodInfo.MakeGenericMethod(type);
                genericMethodInfo.Invoke(null, null);
            }
        }
    }
}
ログイン後にコピー

この例では、Sample 名前空間で見つかった型に基づいて、汎用 CallMe メソッドが動的に呼び出されます。 .

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

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