Свойство - Описание
Type DeclaringType- Тип класса или интерфейса, в котором объявляется отражаемый член
MemberTypes MemberType- Тип члена. Это значение обозначает, является ли член полем, методом, свойством, событием или конструктором
int MetadataToken- Значение, связанное к конкретными метаданными
Module Module- Объект типа Module, представляющий модуль (исполняемый файл), в котором находится отражаемый тип
string Name- Имя типа
Type ReflectedType- Тип отражаемого объекта
Следует иметь в виду, что свойство MemberTypeвозвращает тип MemberTypes— перечисление, в котором определяются значения, обозначающие различные типы членов. К их числу относятся следующие.
MemberTypes.Constructor
MemberTypes.Method
MemberTypes.Field
MemberTypes.Event
MemberTypes.Property
Следовательно, тип члена можно определить, проверив свойство MemberType. Так, если свойство MemberTypeимеет значение MemberTypes.Method, то проверяемый член является методом.
В класс Memberlnfовходят два абстрактных метода: GetCustomAttributes()и IsDefined(). Оба метода связаны с атрибутами. Первый из них получает список специальных атрибутов, имеющих отношение к вызывающему объекту, а второй устанавливает, определен ли атрибут для вызывающего метода. В версию .NET Framework Version 4.0 внедрен метод GetCustomAttributesData(), возвращающий сведения о специальных атрибутах. (Подробнее об атрибутах речь пойдет далее в этой главе.)
Класс Туредобавляет немало своих собственных методов и свойств к числу тех, что определены в классе Memberlnfо. В качестве примера ниже перечислен ряд наиболее часто используемых методов класса Туре.
Метод - Назначение
Constructorlnfо[] GetConstructors()- Получает список конструкторов для заданного типа
EventInfo[] GetEvents()- Получает список событий для заданного типа
Fieldlnfо[] GetFields()- Получает список полей для заданного типа
Type[] GetGenericArguments()- Получает список аргументов типа, связанных с закрыто сконструированным обобщенным типом, или же список параметров типа, если заданный тип определен как обобщенный. Для открыто сконструированного типа этот список может содержать как аргументы, так и параметры типа. (Более подробно обобщения рассматриваются в главе 18.)
MemberInfo[] GetMembers()- Получает список членов для заданного типа
MethodInfo[] GetMethods()- Получает список методов для заданного типа
PropertyInfo[] GetProperties()- Получает список свойств для заданного типа
Далее приведен ряд наиболее часто используемых свойств, доступных только для чтения и определенных в классе Туре.
Свойство - Назначение
Assembly Assembly- Получает сборку для заданного типа
TypeAttributes Attributes- Получает атрибуты для заданного типа
Type BaseType- Получает непосредственный базовый тип для заданного типа
string FullName- Получает полное имя заданного типа
bool IsAbstract- Истинно, если заданный тип является абстрактным
bool isArray- Истинно, если заданный тип является массивом
bool IsClass- Истинно, если заданный тип является классом
bool IsEnum- Истинно, если заданный тип является перечислением
bool IsGenericParameter- Истинно, если заданный тип является параметром обобщенного типа. (Более подробно обобщения рассматриваются в главе 18.)
bool IsGenericType- Истинно, если заданный тип является обобщенным. (Более подробно обобщения рассматриваются в главе 18.)
string Namespace- Получает пространство имен для заданного типа
С помощью методов и свойств класса Туреможно получить подробные сведения о типе данных во время выполнения программы. Это довольно эффективное средство. Ведь получив сведения о типе данных, можно сразу же вызвать его конструкторы и методы или воспользоваться его свойствами. Следовательно, рефлексия позволяет использовать код, который не был доступен во время компиляции.
Прикладной интерфейс Reflection API весьма обширен и поэтому не может быть полностью рассмотрен в этой главе. Ведь для этого потребовалась бы целая книга! Но прикладной интерфейс Reflection API имеет ясную логическую структуру, а следовательно, уяснив одну его часть, нетрудно понять и все остальное. Принимая во внимание это обстоятельство, в последующих разделах демонстрируются четыре основных способа применения рефлексии: получение сведений о методах, вызов методов, конструирование объектов и загрузка типов данных из сборок.
Читать дальше