Для получения информации о членах класса имеется несколько групп (семейств) методов. Каждая группа обеспечивает получение информации об определённом типе членов класса. Например, информацию только о конструкторах класса, или только о его полях. Но есть одна группа методов, которые позволяют получать информацию сразу обо всех членах класса. Это семейство методов GetMembers.
public MemberInfo[] GetMembers();
public abstract MemberInfo[] GetMembers(BindingFlags);
В каждом семействе имеется не меньше двух методов, аналогичных приведенным выше. Один из этих методов возвращает массив, содержащий информацию об открытых (public) членах, а другой позволяет указать, информацию о каких членах класса следует возвращать. Например, если передать в качестве параметра BindingFlags.Public | BindingFlags.Instance, будут возвращены все открытые нестатические члены класса. Если вам нужна информация ещё и о статических членах, нужно добавить ещё один флаг BindingFlags.Static. А если вас интересуют не только открытые, но и закрытые члены, следует использовать флаг BindingFlags.NonPublic.
Ниже перечислены основные семейства методов класса Type, используемые для получения информации о членах класса.
Таблица 2.2 – Основные методы класса Type
GetConstructors
Получение информации о конструкторах класса. Возвращает массив элементов типа ConstructorInfo.
GetCustomAttributes
Получение информации об атрибутах класса. Возвращает массив объектов-атрибутов.
GetEvents
Получение информации о событиях, поддерживаемых классом. Возвращает массив элементов типа EventInfo.
GetFields
Получение информации о полях класса. Возвращает массив элементов типа FieldInfo.
GetInterfaces
Получение информации об интерфейсах, реализованных или унаследованных классом. Возвращает массив элементов типа Type.
GetMembers
Получение информации о членах класса (включая свойства, методы, поля, события и т.д.) Возвращает массив элементов типа MemberInfo.
GetMethods
Получение информации о методах класса. Возвращает массив элементов типа MethodInfo.
GetNestedTypes
Получение информации о вложенных типах класса. Возвращает массив элементов типа Type.
GetProperties
Получение информации о свойствах (properties) класса. Возвращает массив элементов типа PropertyInfo.
GetTypeArray
Получение информации о типе элементов массива (если рассматриваемый тип является массивом). Возвращает соответствующий объект Type.
Поскольку и конструкторы, и поля, и события, и методы, и свойства - это всё члены класса, то совершенно логично, что соответствующие им типы метаданных, (ConstructorInfo, EventInfo, FieldInfo, MethodInfo, PropertyInfo) унаследованы от типа MemberInfo.
Давайте рассмотрим пример получения информации обо всех конструкторах класса.
В этом примере можно видеть, каким способом извлекается информация о параметрах методов. Каждая структура данных, отвечающая за методы-члены (EventInfo, MethodInfo, ConstructorInfo), имеет метод GetParameters(), возвращающий массив элементов типа ParameterInfo. Каждый элемент этого массива описывает отдельный параметр метода: его тип, имя, значение по умолчанию, направление передачи данных (in/out) и др.