Рефлексия
Просмотр метаданных самой сборки
Просмотр (части) метаданных типа Саг
В метаданных класса Саг указан базовый класс типа (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, и т.д.