リフレクション (C#)Reflection (C#)

リフレクションによって、アセンブリ、モジュール、および型を記述する (Type 型の) オブジェクトが提供されます。Reflection provides objects (of type Type) that describe 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 and invoke its methods or access its fields and properties. コードで属性を使用している場合は、リフレクションを使用してそれらにアクセスできます。If you are using attributes in your code, reflection enables you to access them. 詳細については、「属性」を参照してください。For more information, see Attributes.

次の例は、GetType() メソッドを使用して変数の型を取得する簡単なリフレクションを示しています。このメソッドは、Object 基底クラスからすべての型に継承されるメソッドです。Here's a simple example of reflection using the GetType() method - inherited by all types from the Object base class - to obtain the type of a variable:

注意

.cs ファイルの先頭に using System;using System.Reflection; を必ず追加してください。Make sure you add using System; and using System.Reflection; at the top of your .cs file.

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

出力は System.Int32 になります。The output is: System.Int32.

次の例では、リフレクションを使用して、読み込まれたアセンブリの完全名を取得します。The following example uses reflection to obtain the full name of the loaded assembly.

// 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 になります。The output is: System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e.

注意

C# の protected キーワードと internal キーワードは、IL では意味を持たないため、リフレクション API でも使用されません。The C# keywords protected and internal have no meaning in IL and are not used in the reflection APIs. IL では、"ファミリ" および "アセンブリ" という用語がこれに相当します。The corresponding terms in IL are Family and Assembly. リフレクションを使用して internal メソッドを指定するには、IsAssembly プロパティを使用します。To identify an internal method using reflection, use the IsAssembly property. protected internal メソッドを指定するには、IsFamilyOrAssembly を使用します。To identify a protected internal method, use the IsFamilyOrAssembly.

リフレクションの概要Reflection overview

リフレクションは、次の場合に役立ちます。Reflection is useful in the following situations:

詳細情報For more information:

参照See also