リフレクション (C# および Visual Basic)

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

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

' Using GetType to obtain type information:
Dim i As Integer = 42
Dim type As System.Type = i.GetType()
System.Console.WriteLine(type)
// Using GetType to obtain type information:
int i = 42;
System.Type type = i.GetType();
System.Console.WriteLine(type);

出力は次のとおりです。

System.Int32

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

' Using Reflection to get information from an Assembly:
Dim info As System.Reflection.Assembly = GetType(System.Int32).Assembly
System.Console.WriteLine(info)
// Using Reflection to get information from an Assembly:
System.Reflection.Assembly info = typeof(System.Int32).Assembly;
System.Console.WriteLine(info);

出力は次のとおりです。

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

注意

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

リフレクションの概要

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

  • プログラムのメタデータ内の属性にアクセスする必要がある場合。 詳細については、「属性に格納されている情報の取得」を参照してください。

  • アセンブリの型をチェックし、インスタンス化する場合。

  • 実行時に新しい型を作成する場合。 System.Reflection.Emit でクラスを使用します。

  • 遅延バインディングを実行するために、実行時に作成された型でメソッドにアクセスする場合。 「型の動的な読み込みおよび使用」を参照してください。

関連項目

詳細情報

参照

参照

アプリケーション ドメイン (C# および Visual Basic)

概念

C# プログラミング ガイド

共通言語ランタイムのアセンブリ

その他の技術情報

Visual Basic のプログラミング ガイド