Рефлексия

Просмотр метаданных самой сборки

Просмотр (части) метаданных типа Саг

В метаданных класса Саг указан базовый класс типа (System.Object) и различные флаги, которые описывают то, каким образом был создан тип. Для метода приводится имя, принимаемые параметры и возвращаемое значение. автоматическое поле приводит к генерации компилятором приватного вспомогательного поля (по имени <PetName>k BackingField) и двух методов (в случае свойства, доступного для чтения и записи), которыми в рассматриваемом примере являются getPetName () и setPetName (). И, наконец, само свойство отображается в метаданных .NET на внутренние методы get /set с использованием маркеров Setter и Getter.

 

В окне метаданных утилиты ildasm.exe можно также просматривать метаданные .NET, описывающие саму сборку, для обозначения которых используется маркер Assembly. User Strings обязательно документирует все присутствующие в кодовой базе строковые литералы.

Рефлексией (reflection) называется процесс обнаружения типов во время выполнения. С применением служб рефлексии те же самые метаданные, которые отображает утилита ildasm.exe, можно получать программно в виде удобной объектной модели. Например, рефлексия позволяет извлечь список всех типов, которые содержатся внутри определенной сборки * . dll или * . ехе. Как и в любом другом пространстве имен, в System.Reflection (которое поставляется в составе сборки mscorlib.dll) содержится набор взаимосвязанных типов.

 

Assembly   В этом абстрактном классе содержатся статические методы, которые позволяют загружать сборку, исследовать ее и производить с ней различные манипуляции
AssemblyName   Этот класс позволяет выяснить различные детали, связанные с идентификацией сборки (номер версии, информация о культуре и т.д.)
Eventlnfo   В этом абстрактном классе хранится информация о заданном событии
MemberInfo   В этом абстрактном классе хранится информация о заданном поле
Methodlnfo   Этот абстрактный базовый класс определяет общее поведение для типов Eventlnfo, Fieldlnfo, Methodlnfo и Propertylnfo
Module   В этом абстрактном классе содержится информация по заданному методу
Parameterlnfo   Этот абстрактный класс позволяет получить доступ к определенному модулю внутри многофайловой сборки

Чтобы понять, каким образом использовать пространство имен System. Reflection для программного чтения метаданных .NET, необходимо сначала ознакомиться с классом System.Type.

Класс System.Type

Класс System. Type имеет набор членов, которые могут применяться для изучения метаданных типа, и большинство из которых возвращает типы из пространства имен System. Reflection. Например, член Туре. GetMethods () возвращает массив объектов типа Methodlnfo, член Type.GetFields () — массив объектов типа Fieldlnfo, и т.д.