Поделиться через


Общие сведения об отражении

Обновлен: Ноябрь 2007

Загрузчик среды CLR управляет доменами приложений, которые образуют определенные границы для объектов с одинаковой областью приложения. В частности, он загружает каждую сборку в соответствующий домен приложения и контролирует распределение памяти для иерархии типов в каждой сборке.

Сборки содержат модули, модули содержат типы, которые, в свою очередь, содержат члены. Механизм отражения позволяет получать объекты, которые инкапсулируют сборки, модули и типы. Отражение можно использовать для динамического создания экземпляра типа, привязки типа к существующему объекту или получения типа существующего объекта. После этого можно вызывать методы типа или обращаться к его полям и свойствам. Наиболее распространены следующие примеры использования отражения.

  • Объект Assembly используется для определения и загрузки сборок, загрузки модулей, перечисленных в манифесте сборки, а также для поиска типа в сборке и создания его экземпляра.

  • Объект Module используется для получения таких сведений, как имя сборки, содержащей данный модуль, и перечень классов этого модуля. Кроме того, можно получить все глобальные методы или определенные неглобальные методы, включенные в модуль.

  • Объект ConstructorInfo используется для получения таких сведений, как имя, параметры, модификаторы доступа (например public или private) и параметры реализации конструктора (например abstract или virtual). Для вызова конкретного конструктора используется метод GetConstructors или GetConstructor определенного типа Type.

  • Класс MethodInfo позволяет получить сведения об имени, возвращаемых типах, параметрах, модификаторах доступа (таких как public или private), а также параметрах реализации (abstract или virtual) для метода. Для вызова конкретного метода используется метод GetMethods или GetMethod типа Type.

  • Класс FieldInfo позволяет получить сведения об имени, модификаторах доступа (таких как public или private) и параметрах реализации (static) поля, а также получать или задавать значения полей.

  • Класс EventInfo используется для получения таких сведений о событии, как имя, тип данных обработчика события, пользовательские атрибуты, объявленный тип и отраженный тип, а также для добавления и удаления обработчиков событий.

  • Класс PropertyInfo позволяет получить такие сведения о свойстве, как имя, тип данных, объявленный тип, отраженный тип и состояние (доступ только для чтения или для чтения и записи), а также получать и задавать значения свойств.

  • Класс ParameterInfo позволяет получить такие сведения, как имя параметра, тип данных, вид параметра (входной или выходной) и расположение параметра в подписи метода.

  • Класс CustomAttributeData позволяет получить сведения о настраиваемых атрибутах при работе в контексте домена, предназначенном только для отражения. Класс CustomAttributeData позволяет изучать атрибуты без создания их экземпляров.

Классы пространства имен System.Reflection.Emit реализуют особый вид отражения, который позволяет создавать типы во время выполнения.

Отражение также может использоваться для создания приложений, называемых обозревателями типов, которые позволяют пользователям выбирать типы и затем просматривать сведения о них.

Есть и другие способы использования отражения. Компиляторы таких языков программирования, как Jscript, используют отражение для построения таблиц символических имен. Классы в пространстве имен System.Runtime.Serialization при помощи отражения осуществляют доступ к данным и определяют, какие поля следует сохранить. Классы в пространстве имен System.Runtime.Remoting используют отражение косвенным путем при сериализации.

См. также

Ссылки

Пространство имен отражения

System.Reflection.Emit

Другие ресурсы

Отражение

Предоставление динамических методов и сборок