リフレクション

System.Reflection 名前空間のクラスを System.Type クラスと共に使用すると、読み込まれたアセンブリについての情報、およびそのアセンブリ内に定義されているクラスインターフェイス値型などの型を取得できます。 また、リフレクションを使用すると、実行時に型インスタンスを作成したり、作成した型インスタンスを呼び出したり、アクセスできます。 リフレクションの特性に関するトピックについては、この概要の最後の「関連トピック」を参照してください。

共通言語ランタイム ローダーは、アプリケーション ドメインを管理します。アプリケーション ドメインは、同じアプリケーション スコープのオブジェクトの周りに定義された境界を構成します。 アプリケーション ドメインの管理には、該当アプリケーション ドメインへの各アセンブリの読み込み、および各アセンブリ内の型階層のメモリ レイアウトの制御などが含まれます。

アセンブリには、モジュールが含まれています。モジュールには、型が含まれています。また、型にはメンバーが含まれています。 リフレクションは、アセンブリ、モジュール、および型をカプセル化するオブジェクトを提供します。 リフレクションを使用すると、動的に型のインスタンスを作成したり、作成したインスタンスを既存のオブジェクトにバインドしたり、既存のオブジェクトから型を取得できます。 その後で、型のメソッドを呼び出したり、型のフィールドやプロパティにアクセスできます。 リフレクションの代表的な用途は、次のとおりです。

  • Assembly を使用して、アセンブリを定義または読み込み、アセンブリ マニフェストにリストされているモジュールを読み込み、そのアセンブリから型を検索し、そのインスタンスを作成します。

  • モジュールを含んでいるアセンブリや、モジュール内のクラスなどの情報を探索するには、Module を使用します。 また、すべてのグローバル メソッドも取得できます。その他、モジュールに定義されている固有の非グローバルなメソッドも取得できます。

  • 名前、パラメーター、アクセス修飾子 (public または private など)、およびコンストラクターの実装詳細 (abstract または virtual など) の情報を探索するには、ConstructorInfo を使用します。 特定のコンストラクターを呼び出すには、TypeGetConstructors メソッドまたは GetConstructor メソッドを使用します。

  • 名前、戻り値の型、パラメーター、アクセス修飾子 (public または private など)、およびメソッドの実装詳細 (abstract または virtual など) の情報を探索するには、MethodInfo を使用します。 特定のメソッドを呼び出すには、TypeGetMethods メソッドまたは GetMethod メソッドを使用します。

  • フィールドの名前、アクセス修飾子 (public または private など)、フィールドの実装詳細 (static など) などの情報を探索したり、フィールドの値を取得または設定したりするには、FieldInfo を使用します。

  • 名前、イベント ハンドラーのデータ型、カスタム属性、宣言型、イベントのリフレクションされた型などの情報を探索したり、イベント ハンドラーを追加および削除したりするには、EventInfo を使用します。

  • プロパティの名前、データ型、宣言型、リフレクションされた型、読み取り専用または書き込み可能のステータスなどの情報を探索したり、プロパティの値を取得または設定したりするには、PropertyInfo を使用します。

  • パラメーターの名前、データ型、パラメーターが入力パラメーターか出力パラメーターかなどの情報を探索したり、メソッド シグネチャ内のパラメーターの位置を探索したりするには、ParameterInfo を使用します。

  • アプリケーション ドメインのリフレクション専用のコンテキストで作業する際に、カスタム属性に関する情報を検索するには、CustomAttributeData を使用します。 CustomAttributeData を使用すると、それらのインスタンスを作成せずに属性を調べることができます。

System.Reflection.Emit 名前空間のクラスは、実行時に型を作成できる特殊な形態のリフレクションを提供します。

また、リフレクションを使用すると、型を選択し、型についての情報を表示できる、型ブラウザーと呼ばれるアプリケーションを作成することもできます。

リフレクションには、他の用途もあります。 JScript のような言語のコンパイラは、リフレクションを使用してシンボル テーブルを構築します。 System.Runtime.Serialization 名前空間のクラスは、リフレクションを使用して、データにアクセスし、永続化するフィールドを決定します。 System.Runtime.Remoting 名前空間のクラスは、シリアル化を通じて間接的にリフレクションを使用します。

関連トピック

タイトル

説明

リフレクションのランタイム型

System.Reflection 名前空間の抽象クラスを継承し、その抽象クラスの実装の大部分を提供する、RuntimeType などの内部型について説明します。

型情報の表示

Type クラスについて説明します。Type をさまざまなリフレクション クラスと共に使用して、コンストラクター、メソッド、フィールド、プロパティ、およびイベントについての情報を取得する方法を示すコード例を提供します。

リフレクションとジェネリック型

ジェネリック型およびジェネリック メソッドの型パラメーターと型引数がリフレクションでどのように処理されるかについて説明します。

リフレクション クラスで使用されるデザイン パターン

メソッドの名前付けパターンを示す表を提供し、ModuleTypeMemberInfo の各クラスなど、最も一般的に使用されるリフレクション クラスの使い方を説明します。

リフレクションに関するセキュリティ上の考慮事項

型情報を探索し、型にアクセスするためにどの程度までリフレクションを使用できるかを決定する規則を説明します。

型の動的な読み込みおよび使用

遅延バインディングをサポートするリフレクション カスタム バインディング インターフェイスについて説明します。

方法 : リフレクションのみのコンテキストにアセンブリを読み込む

リフレクションのみの読み込みのコンテキストについて説明します。 アセンブリを読み込む方法、そのコンテキストをテストする方法、およびリフレクションのみのコンテキストでアセンブリに適用されている属性を調べる方法を紹介します。

既定のメンバーへのアクセス

リフレクションを使用してクラスの既定のメンバーにアクセスする方法を説明します。

既定の引数値へのアクセス

リフレクションを使用して既定値を持つ引数にアクセスする方法と、既定値の引数を持つメソッドを呼び出す方法を説明します。

カスタム属性へのアクセス

リフレクションを使用して、属性の有無および属性値を照会する方法を説明します。

完全修飾型名の指定

Backus-Naur form (BNF) に基づく完全修飾型名の書式と、特殊文字、アセンブリ名、ポインター、参照、および配列を指定するときに要求される構文を説明します。

アンマネージ リフレクション API

アンマネージ リフレクションを使用してメタデータを調べる際の情報を検索する場所について説明します。

方法 : リフレクションを使用してデリゲートをフックする

メソッドのデリゲートを作成し、デリゲートをイベントにフックする方法について説明します。 また、DynamicMethod を使用して実行時にイベント処理メソッドを作成する方法について説明します。

動的メソッドおよびアセンブリの出力

動的アセンブリや動的メソッドを生成する方法について説明します。

参照

System.Type

System.Reflection

System.Reflection.Emit

ページのトップへ