Процесс анализа типов (структуры типов) в ходе выполнения приложения (сборки). В .NET реализуется при помощи класса System.Type и пространства имён System.Reflection.
reflection - система, предоставляющая выполняемому коду информацию о нем самом.
Пространство имён System.Reflection содержит классы и интерфейсы, которые позволяют организовать просмотр загруженных в сборку типов, методов, полей (данных-членов), и обеспечивают динамические механизмы реализации типов и вызова методов. Включает множество взаимосвязанных классов, интерфейсов, структур и делегатов, предназначенных для реализации процесса отражения. Неполный перечень классов представлен ниже:
Тип
Назначение
Assembly
Методы для загрузки, описания и выполнения разнообразных операций над сборкой.
AssemblyName
Информация о сборке (идентификатор, версия, язык реализации).
EventInfo
Информация о событиях.
FieldInfo
Информация о полях.
MemberInfo
Абстрактный базовый класс, определяющий общие члены для EventInfo, FieldInfo, MethodInfo, PropertyInfo.
MethodInfo
Информация о методе.
Module
Позволяет обратиться к модулю в многофайловой сборке.
ParameterInfo
Информация о параметре.
PropertyInfo
Информация о свойстве.
Класс System.Type содержит методы, позволяющие получать информацию о типах приложения, пространства имён System.Reflection определяет типы для организации позднего связывания и динамической загрузки типов.
Класс Type является основой для реализации функциональности System.Reflection и средством для получения доступа к метаданным.
Использование членов класса Тип, позволяет получить информацию о:
§ типе (GetType(string)),
§ конструкторах (GetConstructors()),
§ методах (GetMethods()),
§ данных-членах (GetFields()),
§ свойствах (GetProperties()),
§ событиях, объявленных в классе (GetEvents()),
§ модуле,
§ сборке, в которой реализуется данный класс.
Объект-представитель класса Type уникален. Две ссылки на объекты-представители класса Type оказываются эквивалентными, если только они были построены в результате обращения к одному и тому же типу.
Объект-представитель класса Type может представить любой из следующих типов:
§ Классы
§ Размерные типы
§ Массивы
§ Интерфейсы
§ Указатели
§ Перечисления
Ссылка на объект-представитель класса Type, ассоциированная с некоторым типом, может быть получена одним из следующих способов:
1. В результате вызова метода
Type Object.GetType()
(метода-члена класса Object), который возвращает ссылку на объект-представитель типа Type, представляющий информацию о типе. Вызов производится от имени объекта-представителя данного типа. Вызов становится возможен в связи с тем, что любой класс наследует тип Object.
2. В результате вызова статического метода-члена класса Type:
public static Type Type.GetType(string)
Параметром является строка со значением имени типа. Возвращает объект-представитель класса Type, с информацией о типе, специфицированном параметром метода.
3. От имени объекта-представителя класса Assembly - от имени объекта-сборки (самоописываемого, многократно используемого, версифицируемого БЛОКА (фрагмента) CLR-приложения) вызываются методы
Type[] Assembly.GetTypes()
Type Assembly.GetType(string)
// Получаем ссылку на сборку, содержащую объявление типа MyType,
// затем – массив объектов-представителей класса Type.
От имени объекта-представителя класса Module (Модуль - portable executable файл с расширением .dll или .exe, состоящий из одного и более классов и интерфейсов)
// The TypeFilter делегаты используются to filter списка классов.
// А как этим хозяйством пользоваться - не знаю. В хелпах не нашёл.
public delegate bool TypeFilter(Type m, object filterCriteria);
4. В результате выполнения операции typeof(), которая применяется для построения объекта-представителя класса System.Type. Выражение, построенное на основе операции typeof, имеет следующий вид:
typeof(type)
Операнд выражения – тип, для которого может быть построен объект-представитель класса System.Type.