.NET のリフレクションReflection in .NET

System.Reflection 名前空間のクラスを System.Type と共に使用すると、読み込まれたアセンブリについての情報、およびそのアセンブリ内に定義されているクラスインターフェイス値型などの型を取得できます。The classes in the System.Reflection namespace, together with System.Type, enable you to obtain information about loaded assemblies and the types defined within them, such as classes, interfaces, and value types. また、リフレクションを使用すると、実行時に型インスタンスを作成したり、作成した型インスタンスを呼び出したり、アクセスしたりできます。You can also use reflection to create type instances at run time, and to invoke and access them. リフレクションのさまざまな面に関するトピックについては、この概要の最後の「関連トピック」を参照してください。For topics about specific aspects of reflection, see Related Topics at the end of this overview.

共通言語ランタイム ローダーは、アプリケーション ドメインを管理します。アプリケーション ドメインは、同じアプリケーション スコープのオブジェクトの周りに定義された境界を構成します。The common language runtime loader manages application domains, which constitute defined boundaries around objects that have the same application scope. アプリケーション ドメインの管理には、該当アプリケーション ドメインへの各アセンブリの読み込み、および各アセンブリ内の型階層のメモリ レイアウトの制御などが含まれます。This management includes loading each assembly into the appropriate application domain and controlling the memory layout of the type hierarchy within each assembly.

アセンブリには、モジュールが含まれています。モジュールには、型が含まれています。また、型にはメンバーが含まれています。Assemblies contain modules, modules contain types, and types contain members. リフレクションは、アセンブリ、モジュール、および型をカプセル化するオブジェクトを提供します。Reflection provides objects that encapsulate assemblies, modules, and types. リフレクションを使用すると、動的に型のインスタンスを作成したり、その型を既存のオブジェクトにバインドしたり、既存のオブジェクトから型を取得できます。You can use reflection to dynamically create an instance of a type, bind the type to an existing object, or get the type from an existing object. その後で、型のメソッドを呼び出したり、型のフィールドやプロパティにアクセスしたりできます。You can then invoke the type's methods or access its fields and properties. リフレクションの代表的な用途は、次のとおりです。Typical uses of reflection include the following:

  • Assembly を使用して、アセンブリを定義または読み込み、アセンブリ マニフェストにリストされているモジュールを読み込み、そのアセンブリから型を検索し、そのインスタンスを作成します。Use Assembly to define and load assemblies, load modules that are listed in the assembly manifest, and locate a type from this assembly and create an instance of it.

  • モジュールを含んでいるアセンブリや、モジュール内のクラスなどの情報を探索するには、Module を使用します。Use Module to discover information such as the assembly that contains the module and the classes in the module. また、すべてのグローバル メソッドも取得できます。その他、モジュールに定義されている固有の非グローバルなメソッドも取得できます。You can also get all global methods or other specific, nonglobal methods defined on the module.

  • 名前、パラメーター、アクセス修飾子 (public または private など)、およびコンストラクターの実装詳細 (abstract または virtual など) の情報を探索するには、ConstructorInfo を使用します。Use ConstructorInfo to discover information such as the name, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a constructor. 特定のコンストラクターを呼び出すには、TypeGetConstructors メソッドまたは GetConstructor メソッドを使用します。Use the GetConstructors or GetConstructor method of a Type to invoke a specific constructor.

  • 名前、戻り値の型、パラメーター、アクセス修飾子 (public または private など)、およびメソッドの実装詳細 (abstract または virtual など) の情報を探索するには、MethodInfo を使用します。Use MethodInfo to discover information such as the name, return type, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a method. 特定のメソッドを呼び出すには、TypeGetMethods メソッドまたは GetMethod メソッドを使用します。Use the GetMethods or GetMethod method of a Type to invoke a specific method.

  • フィールドの名前、アクセス修飾子 (public または private など)、フィールドの実装詳細 (static など) などの情報を探索したり、フィールドの値を取得または設定したりするには、FieldInfo を使用します。Use FieldInfo to discover information such as the name, access modifiers (such as public or private) and implementation details (such as static) of a field, and to get or set field values.

  • 名前、イベント ハンドラーのデータ型、カスタム属性、宣言型、イベントのリフレクションされた型などの情報を探索したり、イベント ハンドラーを追加および削除したりするには、EventInfo を使用します。Use EventInfo to discover information such as the name, event-handler data type, custom attributes, declaring type, and reflected type of an event, and to add or remove event handlers.

  • プロパティの名前、データ型、宣言型、リフレクションされた型、読み取り専用または書き込み可能のステータスなどの情報を探索したり、プロパティの値を取得または設定したりするには、PropertyInfo を使用します。Use PropertyInfo to discover information such as the name, data type, declaring type, reflected type, and read-only or writable status of a property, and to get or set property values.

  • パラメーターの名前、データ型、パラメーターが入力パラメーターか出力パラメーターかなどの情報を探索したり、メソッド シグネチャ内のパラメーターの位置を探索したりするには、ParameterInfo を使用します。Use ParameterInfo to discover information such as a parameter's name, data type, whether a parameter is an input or output parameter, and the position of the parameter in a method signature.

  • アプリケーション ドメインのリフレクション専用のコンテキストで作業する際に、カスタム属性に関する情報を検索するには、CustomAttributeData を使用します。Use CustomAttributeData to discover information about custom attributes when you are working in the reflection-only context of an application domain. CustomAttributeData を使用すると、それらのインスタンスを作成せずに属性を調べることができます。CustomAttributeData allows you to examine attributes without creating instances of them.

System.Reflection.Emit 名前空間のクラスは、実行時に型を作成できる特殊な形態のリフレクションを提供します。The classes of the System.Reflection.Emit namespace provide a specialized form of reflection that enables you to build types at run time.

また、リフレクションを使用すると、ユーザーが型を選択し、型についての情報を表示できる、型ブラウザーと呼ばれるアプリケーションを作成することもできます。Reflection can also be used to create applications called type browsers, which enable users to select types and then view the information about those types.

リフレクションには、他の用途もあります。There are other uses for reflection. JScript のような言語のコンパイラは、リフレクションを使用してシンボル テーブルを構築します。Compilers for languages such as JScript use reflection to construct symbol tables. System.Runtime.Serialization 名前空間のクラスは、リフレクションを使用して、データにアクセスし、永続化するフィールドを決定します。The classes in the System.Runtime.Serialization namespace use reflection to access data and to determine which fields to persist. System.Runtime.Remoting 名前空間のクラスは、シリアル化を通じて間接的にリフレクションを使用します。The classes in the System.Runtime.Remoting namespace use reflection indirectly through serialization.

リフレクションのランタイム型Runtime Types in Reflection

リフレクションは TypeMethodInfo などのクラスを提供して、型、メンバー、パラメーター、およびその他のコード エンティティを示します。Reflection provides classes, such as Type and MethodInfo, to represent types, members, parameters, and other code entities. ただし、リフレクションを使用する場合は、これらのクラスを直接利用しません。これらの大部分は抽象 (Visual Basic では MustInherit) です。However, when you use reflection, you don't work directly with these classes, most of which are abstract (MustInherit in Visual Basic). 代わりに、共通言語ランタイム (CLR) によって提供される型を利用します。Instead, you work with types provided by the common language runtime (CLR).

たとえば、C# typeof 演算子 (Visual Basic では GetType) を使用して Type オブジェクトを取得する場合、オブジェクトは実際には RuntimeType です。For example, when you use the C# typeof operator (GetType in Visual Basic) to obtain a Type object, the object is really a RuntimeType. RuntimeTypeType から派生し、すべての抽象メソッドの実装を提供します。RuntimeType derives from Type and provides implementations of all the abstract methods.

これらのランタイム クラスは internal (Visual Basic では Friend) です。These runtime classes are internal (Friend in Visual Basic). それらは基本クラスと別のドキュメントでは説明していません。それらの動作は基本クラスのドキュメントで説明されています。They are not documented separately from their base classes, because their behavior is described by the base class documentation.

TitleTitle 説明Description
型情報の表示Viewing Type Information Type クラスについて説明します。Type をさまざまなリフレクション クラスと共に使用して、コンストラクター、メソッド、フィールド、プロパティ、およびイベントについての情報を取得する方法を示すコード例を提供します。Describes the Type class and provides code examples that illustrate how to use Type with several reflection classes to obtain information about constructors, methods, fields, properties, and events.
リフレクションとジェネリック型Reflection and Generic Types ジェネリック型およびジェネリック メソッドの型パラメーターと型引数がリフレクションでどのように処理されるかについて説明します。Explains how reflection handles the type parameters and type arguments of generic types and generic methods.
リフレクションに関するセキュリティ上の考慮事項Security Considerations for Reflection 型情報を探索し、型にアクセスするためにどの程度までリフレクションを使用できるかを決定する規則を説明します。Describes the rules that determine to what degree reflection can be used to discover type information and access types.
型の動的な読み込みおよび使用Dynamically Loading and Using Types 遅延バインディングをサポートするリフレクション カスタム バインド インターフェイスについて説明します。Describes the reflection custom-binding interface that supports late binding.
方法: リフレクションのみのコンテキストにアセンブリを読み込む」を参照してください。How to: Load Assemblies into the Reflection-Only Context リフレクションのみの読み込みのコンテキストについて説明します。Describes the reflection-only load context. アセンブリを読み込む方法、そのコンテキストをテストする方法、およびリフレクションのみのコンテキストでアセンブリに適用されている属性を調べる方法を紹介します。Shows how to load an assembly, how to test the context, and how to examine attributes applied to an assembly in the reflection-only context.
カスタム属性へのアクセスAccessing Custom Attributes リフレクションを使用して、属性の有無および属性値を照会する方法を説明します。Demonstrates using reflection to query attribute existence and values.
完全修飾型名の指定Specifying Fully Qualified Type Names Backus-Naur form (BNF) に基づく完全修飾型名の書式と、特殊文字、アセンブリ名、ポインター、参照、および配列を指定する際に必要な構文を説明します。Describes the format of fully qualified type names in terms of the Backus-Naur form (BNF), and the syntax required for specifying special characters, assembly names, pointers, references, and arrays.
方法: リフレクションを使用してデリゲートをフックするHow to: Hook Up a Delegate Using Reflection メソッドのデリゲートを作成し、デリゲートをイベントにフックする方法について説明します。Explains how to create a delegate for a method and hook the delegate up to an event. また、DynamicMethod を使用して実行時にイベント処理メソッドを作成する方法について説明します。Explains how to create an event-handling method at run time using DynamicMethod.
動的メソッドおよびアセンブリの出力Emitting Dynamic Methods and Assemblies 動的アセンブリや動的メソッドを生成する方法について説明します。Explains how to generate dynamic assemblies and dynamic methods.

関連項目Reference

System.Type

System.Reflection

System.Reflection.Emit