Maison > développement back-end > C++ > Comment appeler une méthode générique avec un argument de type déterminé par l'exécution ?

Comment appeler une méthode générique avec un argument de type déterminé par l'exécution ?

Linda Hamilton
Libérer: 2024-12-30 15:36:09
original
741 Les gens l'ont consulté

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

Appel d'une méthode générique avec un argument de type connu uniquement au moment de l'exécution

Problème : appel dynamique d'une méthode générique

Vous souhaitez appeler une méthode générique avec un argument de type qui n’est connu qu’au moment de l’exécution. Par exemple, vous avez une liste d'interfaces et vous souhaitez appeler une méthode générique pour chaque interface.

Solution : Invocation dynamique basée sur la réflexion

Étant donné que l'argument de type n'est pas connu à la compilation temps, vous ne pouvez pas utiliser l’invocation de méthode traditionnelle avec des génériques. Au lieu de cela, vous devez utiliser la réflexion pour appeler dynamiquement la méthode générique en fonction de l'argument de type obtenu lors de l'exécution.

Voici comment implémenter cette approche :

  1. Obtenez le Méthode générique : Utilisez Type.GetMethod pour récupérer la méthode générique.
  2. Construisez le type générique Argument : Utilisez Type.GetTypeArguments pour identifier le paramètre de type générique. Ensuite, créez un objet Type représentant l'argument de type réel que vous souhaitez utiliser.
  3. Créer une instance de méthode générique : Utilisez MakeGenericMethod sur la méthode générique pour en créer une instance spécifique avec le type donné. argument.
  4. Invoquer la méthode générique : Enfin, utilisez Invoke sur l'instance de méthode générique créée pour l'invoquer dynamiquement.

Exemple dans le code

// 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
}
Copier après la connexion

En utilisant la réflexion, cette approche vous permet d'appeler dynamiquement la méthode générique avec des arguments de type inconnu au moment de l'exécution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal