リフレクション (C# プログラミング ガイド)
更新 : 2007 年 11 月
リフレクションは、アセンブリ、モジュール、および型を記述する、Type 型のオブジェクトを提供します。リフレクションを使用すると、動的に型のインスタンスを作成したり、作成したインスタンスを既存のオブジェクトにバインドしたり、さらに既存のオブジェクトから型を取得してそのオブジェクトのメソッドを呼び出したり、フィールドやプロパティにアクセスしたりできます。コードで属性を使用している場合、リフレクションを使用すると、それらにアクセスできます。詳細については、「属性 (C# プログラミング ガイド)」を参照してください。
次の例は、すべての型が Object 基本クラスから継承した静的メソッド GetType を使用して変数の型を取得する簡単なリフレクションを示しています。
// 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:
System.Reflection.Assembly o = System.Reflection.Assembly.Load("mscorlib.dll");
System.Console.WriteLine(o.GetName());
出力は次のとおりです。
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
メモ : |
---|
C# キーワードの protected と internal は IL では意味を持ちません。また、リフレクション API でも使用されません。IL では、ファミリおよびアセンブリという用語がこれに相当します。リフレクションを使用して internal メソッドを識別するには、IsAssembly プロパティを使用します。protected internal メソッドを識別するには、IsFamilyOrAssembly を使用します。 |
リフレクションの概要
リフレクションは、次の場合に役立ちます。
プログラムのメタデータ内の属性にアクセスする必要がある場合。「リフレクションによる属性へのアクセス (C# プログラミング ガイド)」を参照してください。
アセンブリの型をチェックし、インスタンス化する場合。
実行時に新しい型を作成する場合。System.Reflection.Emit でクラスを使用します。
遅延バインディングを実行するために、実行時に作成された型でメソッドにアクセスする場合。「型の動的な読み込みおよび使用」を参照してください。
関連項目
詳細については以下を参照してください。
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
1.12 属性
7.5.11 typeof 演算子