Maison >développement back-end >C++ >Comment sélectionner la bonne méthode générique surchargée dans .NET à l'aide de Reflection ?
Dans .NET, lorsqu'il existe plusieurs surcharges de méthodes génériques, il peut être difficile d'essayer d'utiliser la réflexion pour sélectionner la bonne version. Par exemple, une méthode statique de la classe System.Linq.Queryable
a deux définitions pour la méthode Where
:
<code class="language-c#">static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T, bool>> predicate) static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T, bool>> predicate)</code>La méthode
en réflexion n'est pas suffisante pour cette tâche car elle ne permet pas de différencier ces surcharges. GetMethod
ou Action
qui correspond au nombre générique et au nombre de paramètres de la surcharge souhaitée : Func
Exemple 1 : Sélectionnez une méthode qui prend un type générique et un seul paramètre : Where
<code class="language-c#">var method = new Action<object>(MyClass.DoSomething<object>);</code>
Exemple 2 : Sélection d'une méthode qui prend deux types génériques et deux paramètres : Where
<code class="language-c#">var method = new Action<object, object>(MyClass.DoSomething<object, object>);</code>Cette approche nous permet d'obtenir les méthodes dont nous avons besoin sans recourir à des recherches de chaînes ou d'exécution risquées.
Obtenir l'objet MethodInfo
, vous pouvez l'obtenir après avoir créé le délégué : MethodInfo
<code class="language-c#">var methodInfo = method.Method.MakeGenericMethod(type1, type2);</code>Méthode d'extension statique
<code class="language-c#">var method = new Func<IQueryable<object>, Expression<Func<object, bool>>, IQueryable<object>>(Queryable.Where<object>); var methodInfo = method.Method.MakeGenericMethod(modelType);</code>Découplage MethodInfo et types de paramètres
les types d'objet et de paramètre : MethodInfo
<code class="language-c#">var methodInfo = method.Method.GetGenericMethodDefinition(); methodInfo.MakeGenericMethod(type1, type2).Invoke(null, new object[] { collection });</code>Cette technique vous permet d'effectuer des opérations complexes telles que la sélection de méthodes d'instance dans une classe et de les exposer pour une utilisation sur différents types.
Conclusion
et sélectionner la méthode générique correcte au moment de la compilation. Cette approche garantit la sécurité des types et évite les recherches dynamiques inutiles. GetMethod
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!