Maison >développement back-end >C++ >Comment sélectionner avec précision des méthodes génériques avec réflexion au moment de la compilation ?

Comment sélectionner avec précision des méthodes génériques avec réflexion au moment de la compilation ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-11 13:37:43926parcourir

How to Accurately Select Generic Methods with Reflection at Compile Time?

Utilisez la réflexion pour sélectionner des méthodes génériques

Reflection permet d'appeler des méthodes avec des paramètres de type générique spécifiques, mais lorsque plusieurs surcharges génériques sont présentes, choisir la méthode appropriée peut être difficile. Cet article présente une approche au moment de la compilation pour sélectionner précisément une méthode générique cible en manipulant les objets d’informations délégués et de méthode.

Utiliser la méthode de sélection des délégués

Pour les méthodes statiques, la création d'un délégué avec le nombre requis de génériques et de paramètres permet la sélection de surcharges spécifiques. Par exemple, pour sélectionner la première surcharge de DoSomething<TModel>, il ne dispose que d'un seul paramètre générique :

<code class="language-C#">var method = new Action<object>(MyClass.DoSomething<object>);</code>

soit la deuxième surcharge, qui possède deux paramètres génériques :

<code class="language-C#">var method = new Action<object, object>(MyClass.DoSomething<object, object>);</code>

Pour les méthodes d'extension statiques, suivez un modèle similaire, en utilisant les types appropriés pour gérer les paramètres this :

<code class="language-C#">var method = new Func<IQueryable<object>, Expression<Func<bool>>, IQueryable<object>>(Queryable.Where<object>);</code>

Obtenir des informations sur la méthode

La propriété

du délégué Method fournit l'objet MethodInfo sous-jacent. Pour obtenir une définition de méthode générique et fournir des paramètres de type spécifiques :

<code class="language-C#">var methodInfo = method.Method.MakeGenericMethod(type1, type2);</code>

Méthodes d'instance

Pour sélectionner une méthode d'instance, le processus est similaire :

<code class="language-C#">var method = new Action<object>(instance.MyMethod<object>);
var methodInfo = method.Method.GetGenericMethodDefinition().MakeGenericMethod(type1);</code>

Sélection de la méthode de découplage et types de paramètres

Si les paramètres de type générique ne sont déterminés que ultérieurement :

<code class="language-C#">var methodInfo = method.Method.GetGenericMethodDefinition();</code>

Plus tard, transmettez le type souhaité à MakeGenericMethod() :

<code class="language-C#">methodInfo.MakeGenericMethod(type1, type2);</code>

Conclusion

Cette approche permet une sélection précise de méthodes génériques au moment de la compilation, évitant ainsi les recherches d'exécution sujettes aux erreurs ou l'utilisation de chaînes. Il fournit un mécanisme robuste et flexible pour appeler des méthodes génériques avec différents paramètres de type.

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