Отражение (Руководство по программированию на C#)
Обновлен: Ноябрь 2007
Механизм отражения позволяет получать объекты (типа Type), которые описывают сборки, модули и типы. Отражение можно использовать для динамического создания экземпляра типа, привязки типа к существующему объекту, а также получения типа из существующего объекта и вызова его методов или доступа к его полям и свойствам. Если в коде используются атрибуты, отражение обеспечивает доступ к ним. Дополнительные сведения см. в разделе Атрибуты (Руководство по программированию на C#).
Вот простой пример отражения, в котором для получения типа переменной используется статический метод GetType, наследуемый всеми типами из базового класса Object.
// 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 не имеют никакого значения в промежуточном языке и не используются в интерфейсах API отражения. Соответствующими терминами в промежуточном языке являются Family и Assembly. Для идентификации метода internal с помощью отражения используется свойство IsAssembly. Для идентификации метода protected internal используется свойство IsFamilyOrAssembly. |
Общие сведения об отражении
Отражение удобно использовать в следующих ситуациях.
При необходимости доступа к атрибутам в метаданных программы. См. раздел Доступ к атрибутам через отражение.
Для проверки и создания экземпляров типов в сборке.
Для создания новых типов во время выполнения. Используйте классы в System.Reflection.Emit.
Для выполнения позднего связывания, которое обеспечивает доступ к методам в типах, созданных во время выполнения. См. раздел Динамическая загрузка и использование типов.
Разделы по теме
Дополнительные сведения см. в следующих разделах.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:
1.12 Атрибуты
7.5.11 Оператор typeof
См. также
Основные понятия
Руководство по программированию в C#
Ссылки
Домены приложений (руководство по программированию в C#)
Сборки и глобальный кэш сборок (Руководство по программированию на C#)