リフレクション (C#)

リフレクションによって、アセンブリ、モジュール、および型を記述する (Type 型の) オブジェクトが提供されます。 リフレクションを使用すると、動的に型のインスタンスを作成したり、作成したインスタンスを既存のオブジェクトにバインドしたり、さらに既存のオブジェクトから型を取得してそのオブジェクトのメソッドを呼び出したり、フィールドやプロパティにアクセスしたりできます。 コードで属性を使用している場合は、リフレクションを使用してそれらにアクセスできます。 詳細については、「属性」を参照してください。

次の例は、GetType() メソッドを使用して変数の型を取得する簡単なリフレクションを示しています。このメソッドは、Object 基底クラスからすべての型に継承されるメソッドです。

注意

.cs ファイルの先頭に using System;using System.Reflection; を必ず追加してください。

// Using GetType to obtain type information:
int i = 42;
Type type = i.GetType();
Console.WriteLine(type);

出力は System.Int32 になります。

次の例では、リフレクションを使用して、読み込まれたアセンブリの完全名を取得します。

// Using Reflection to get information of an Assembly:
Assembly info = typeof(int).Assembly;
Console.WriteLine(info);

出力は System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e になります。

注意

C# のキーワード protectedinternal は、中間言語 (IL) では意味を持たないため、リフレクション API でも使用されません。 IL では、"ファミリ" および "アセンブリ" という用語がこれに相当します。 リフレクションを使用して internal メソッドを指定するには、IsAssembly プロパティを使用します。 protected internal メソッドを指定するには、IsFamilyOrAssembly を使用します。

リフレクションの概要

リフレクションは、次の場合に役立ちます。

  • プログラムのメタデータ内の属性にアクセスする必要がある。 詳細については、「属性に格納されている情報の取得」を参照してください。
  • アセンブリの型をチェックし、インスタンス化する。
  • 実行時に新しい型を作成する。 System.Reflection.Emit でクラスを使います。
  • 遅延バインディングを実行するために、実行時に作成された型でメソッドにアクセスする。 「型の動的な読み込みおよび使用」を参照してください。

詳細情報

関連項目