リフレクションを使用して拡張メソッドを識別する方法
C# では、リフレクションはコード要素をイントロスペクトするための強力なメカニズムを提供します。これには、拡張メソッドを使用してメソッドがクラスに拡張されているかどうかを識別する機能が含まれます。
メソッドが拡張メソッドとして存在するかどうかを判断する
メソッドは拡張メソッドであるため、リフレクションを使用してアセンブリのメタデータを検査できます。具体的には、
コード例
次のコード スニペットは、チェック方法を示しています。リフレクションを使用した拡張メソッドの場合:
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; } }
このコードは、メソッドが特定のアセンブリ内の特定の型の拡張メソッドであるかどうかを確認するために使用できます。
結論
リフレクションを使用すると、メソッドが拡張メソッドとしてクラスに拡張されているかどうかを判断できます。この手法は、拡張メソッドが正しく実装されていることを確認するなど、さまざまな目的に役立ちます。
以上がC# でリフレクションを使用して拡張メソッドを識別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。