Maison >développement back-end >C++ >Comment puis-je identifier les méthodes d'extension à l'aide de Reflection en C# ?
Comment identifier les méthodes d'extension à l'aide de la réflexion
En C#, la réflexion fournit un mécanisme puissant pour introspecter les éléments de code. Cela inclut la possibilité d'identifier si une méthode a été étendue à une classe à l'aide de méthodes d'extension.
Déterminer si une méthode existe en tant que méthode d'extension
Pour déterminer si une méthode est une méthode d'extension, nous pouvons utiliser la réflexion pour inspecter les métadonnées de l'assembly. Plus précisément, nous pouvons rechercher :
Exemple de code
L'extrait de code suivant montre comment vérifier les méthodes d'extension à l'aide de la réflexion :
using System; using System.Runtime.CompilerServices; using System.Reflection; using System.Linq; using System.Collections.Generic; public static class Helper { public static IEnumerable<MethodInfo> GetExtensionMethods(Assembly assembly, Type extendedType) { var isGenericTypeDefinition = extendedType.IsGenericType && extendedType.IsTypeDefinition; var query = from type in assembly.GetTypes() where type.IsSealed && !type.IsGenericType && !type.IsNested from method in type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) where method.IsDefined(typeof(ExtensionAttribute), false) where isGenericTypeDefinition ? method.GetParameters()[0].ParameterType.IsGenericType && method.GetParameters()[0].ParameterType.GetGenericTypeDefinition() == extendedType : method.GetParameters()[0].ParameterType == extendedType select method; return query; } }
Ce code peut être utilisé pour vérifier si une méthode est une méthode d'extension pour un type spécifique dans un assembly donné.
Conclusion
En utilisant la réflexion, nous pouvons déterminer si une méthode a été étendu à une classe en tant que méthode d'extension. Cette technique est utile à diverses fins, comme vérifier que les méthodes d'extension ont été correctement implémentées.
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!