Maison >développement back-end >C++ >Comment utiliser la réflexion pour invoquer des méthodes génériques avec des paramètres de type dynamique?

Comment utiliser la réflexion pour invoquer des méthodes génériques avec des paramètres de type dynamique?

DDD
DDDoriginal
2025-02-03 07:57:13210parcourir

How to Use Reflection to Invoke Generic Methods with Dynamic Type Parameters?

Utilisation de réflexe dynamique appelant la méthode générique

Parce que les paramètres de type sont inconnus lors de la compilation, la méthode d'appel dynamique doit être reflétée. Pour atteindre cet objectif, suivez les étapes suivantes:

Appelez la méthode générique d'instance

Obtenez le type de classe de déclaration de méthode Scrang.

    Méthodinfo Utilisation de la méthode d'instance de récupération Reflex.
  1. Utilisez les paramètres de type spécifiés par le MakeGeRericMethod pour construire la méthode générique.
  2. Utilisez Invoke pour appeler la méthode générique sur l'instance.
  3. Appelez la méthode générique statique
<code class="language-csharp">Type myType = FindType(typeName);
MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);</code>

Méthodinfo en utilisant la méthode statique de la construction de réflexion.

Utilisez les paramètres de type spécifiés par le MakeGeRericMethod pour construire la méthode générique.
  1. Utilisez Invoke pour appeler la méthode générique statique.
  2. Veuillez noter que pour la méthode statique, le NULL est passé pour invoquer comme premier paramètre.
Autres précautions
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.StaticMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(null, null);</code>

Pour les versions C # 4 et supérieures, l'utilisation de types dynamiques peut simplifier ce processus, en particulier lorsque le type inférieur possible. Cependant, dans certains types d'inférences (comme les exemples fournis), des réflexes peuvent toujours être nécessaires.

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