Отражение (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 static method GetType - inherited by all types from the Object base class - to obtain the type of a variable:

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

Результат.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:  
System.Reflection.Assembly info = typeof(System.Int32).Assembly;  
System.Console.WriteLine(info);  

Результат.The output is:

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

Примечание

Ключевые слова C# protected и internal не имеют никакого значения в промежуточном языке и не используются в интерфейсах API отражения.The C# keywords protected and internal have no meaning in IL and are not used in the reflection APIs. Соответствующими терминами в промежуточном языке являются Family и Assembly.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