Maison >développement back-end >C++ >Comment appeler des méthodes génériques avec des arguments de type dynamique en C# à l'aide de Reflection ?

Comment appeler des méthodes génériques avec des arguments de type dynamique en C# à l'aide de Reflection ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 14:19:40722parcourir

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

Appel de méthodes génériques avec des arguments de type dynamiques

En C#, l'appel de méthodes génériques avec des arguments de type connus uniquement au moment de l'exécution nécessite de tirer parti des capacités de réflexion. Le défi initial impliquait de parcourir des interfaces dans un espace de noms spécifique et d'invoquer une méthode générique en utilisant ces interfaces comme arguments.

Pour surmonter ce problème, suivez ces étapes :

  1. Localisez le Méthode générique : Utilisez Type.GetMethod pour récupérer les informations de la méthode générique.
  2. Créez la méthode Générique : Utilisez MakeGenericMethod pour créer une version spécialisée de la méthode générique pour le type souhaité.
  3. Invoquez la méthode : Appelez Invoke sur la méthode générée pour l'exécuter.

Par exemple, considérons le code suivant :

// 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);
}

Dans cet exemple, nous récupérons la méthode générique "CallMe", créez des versions spécialisées pour chaque type d'interface et invoquez-les de manière réfléchie.

Remarque : Si le type d'interface que vous utilisez est lui-même générique, utilisez MakeGenericType au lieu de MakeGenericMethod, en passant le arguments de type appropriés.

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!

Déclaration:
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