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
Libérer: 2025-01-11 13:37:43
original
929 Les gens l'ont consulté

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

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

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

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

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

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

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

<code class="language-C#">methodInfo.MakeGenericMethod(type1, type2);</code>
Copier après la connexion

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!

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