So identifizieren Sie Erweiterungsmethoden mithilfe von Reflection
In C# bietet Reflection einen leistungsstarken Mechanismus zur Selbstprüfung von Codeelementen. Dazu gehört die Fähigkeit zu identifizieren, ob eine Methode mithilfe von Erweiterungsmethoden auf eine Klasse erweitert wurde.
Bestimmen, ob eine Methode als Erweiterungsmethode existiert
Um festzustellen, ob a -Methode ist eine Erweiterungsmethode. Wir können Reflektion verwenden, um Assembly-Metadaten zu überprüfen. Konkret können wir suchen nach:
Codebeispiel
Der folgende Codeausschnitt zeigt, wie mithilfe von Reflektion nach Erweiterungsmethoden gesucht wird:
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; } }
Dieser Code kann verwendet werden, um zu überprüfen, ob eine Methode eine Erweiterungsmethode für einen bestimmten Typ in einer bestimmten Assembly ist.
Schlussfolgerung
Durch die Verwendung von Reflektion können wir feststellen, ob eine Methode wurde als Erweiterungsmethode auf eine Klasse erweitert. Diese Technik ist für verschiedene Zwecke nützlich, beispielsweise zur Überprüfung, ob Erweiterungsmethoden korrekt implementiert wurden.
Das obige ist der detaillierte Inhalt vonWie kann ich Erweiterungsmethoden mithilfe von Reflection in C# identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!