C# のリフレクションとは、プログラムが実行時に型情報を動的に取得して操作できるようにするメカニズムを指します。リフレクションを通じて、実行時に型を取得し、型のメンバー (プロパティ、メソッド、フィールドなど) にアクセスし、インスタンスを作成してメソッドを呼び出し、さらに型のメンバーを動的に変更することもできます。
リフレクションは、特に一般的なコードやフレームワークを作成する場合など、多くのシナリオで非常に役立ちます。これにより、特定の型を知らなくても、情報に基づいて型を動的にロードして使用することができます。
C# のリフレクションは、主に System.Reflection
名前空間の一部のクラスとインターフェイスによってサポートされています。このうち、Assembly
クラスはアセンブリ情報の読み込みとアクセスに使用され、Type
クラスは型情報の取得と操作に使用され、MethodInfo
クラスはメソッド情報の取得・操作に使用され、PropertyInfo
クラスはプロパティ情報などの取得・操作に使用されます。
以下では、特定のコード例を使用して、リフレクションの使用方法を示します。
using System; using System.Reflection; class MyClass { public int MyProperty { get; set; } public void MyMethod() { Console.WriteLine("Hello, reflection!"); } } class Program { static void Main(string[] args) { // 加载程序集 Assembly assembly = Assembly.GetExecutingAssembly(); // 获取类型 Type myClassType = assembly.GetType("MyNamespace.MyClass"); // 创建实例 object myClassInstance = Activator.CreateInstance(myClassType); // 获取属性 PropertyInfo myProperty = myClassType.GetProperty("MyProperty"); // 设置属性值 myProperty.SetValue(myClassInstance, 42); // 获取方法 MethodInfo myMethod = myClassType.GetMethod("MyMethod"); // 调用方法 myMethod.Invoke(myClassInstance, null); } }
上記のコードは、まず Assembly.GetExecutingAssembly()
メソッドを通じて現在のアセンブリの情報を取得し、次に GetType
メソッドを使用して MyClass
Type
オブジェクト。次に、MyClass
のインスタンスが Activator.CreateInstance
メソッドによって作成されます。
リフレクションを通じて、MyProperty
と MyMethod
の情報を取得し、SetValue
メソッドを使用してプロパティの値を設定しました。 Invoke
メソッドはメソッドを呼び出します。
この単純な例を通して、実行時に型のメンバーを動的にロード、アクセス、変更できるリフレクションの力がわかり、より柔軟で多用途なコード設計が実現します。ただし、リフレクションはパフォーマンスのオーバーヘッドを引き起こす可能性があるため、高いパフォーマンス要件が必要なシナリオでは注意して使用する必要があります。
以上がC# のリフレクション機構の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。