Рефлексия — это средство, позволяющее получать сведения о типе данных. Термин рефлексия, или отражение, происходит от принципа действия этого средства: объект класса Туре отражает базовый тип, который он представляет. Для получения информации о типе данных объекту класса Туре делаются запросы, а он возвращает (отражает) обратно информацию, связанную с определяемым типом. Рефлексия является эффективным механизмом, поскольку она позволяет выявлять и использовать возможности типов данных, известные только во время выполнения.

Многие классы, поддерживающие рефлексию, входят в состав прикладного интерфейса .NET Reflection API, относящегося к пространству имен System. Reflection. Поэтому для применения рефлексии в код программы обычно вводится следующая строка.

using System.Reflection;

Класс System. Type - ядро подсистемы рефлексии

Класс System. Туре составляет ядро подсистемы рефлексии, поскольку он инкапсулирует тип данных. Он содержит многие свойства и методы, которыми можно

пользоваться для получения информации о типе данных во время выполнения. Класс Туре является производным от абстрактного класса System. Re flection. Member Inf о.

В классе Member Inf о определены приведенные ниже свойства, доступные только для чтения.

Свойство

Описание

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 () и Is Defined (). Оба метода связаны с атрибутами. Первый из них получает список специальных атрибутов, имеющих отношение к вызывающему объекту, а второй устанавливает, определен ли атрибут для вызывающего метода. В версию .NET Framework Version 4.0 внедрен метод GetCustomAttributesData (), возвращающий сведения

о специальных атрибутах. (Подробнее об атрибутах речь пойдет далее в этой главе.)

Класс Туре добавляет немало своих собственных методов и свойств к числу тех, что определены в классе Memberlnf о. В качестве примера ниже перечислен ряд наиболее часто используемых методов класса Туре.

Метод

Назначение

Constructorlnfо [ ] GetConstructors () EventInfo[] GetEvents() Fieldlnfо[] GetFields() Type [ ]

GetGenericArguments()

Получает список конструкторов для заданного типа

Получает список событий для заданного типа Получает список полей для заданного типа Получает список аргументов типа, связанных с закрыто сконструированным обобщенным типом, или же список параметров типа, если заданный тип определен как обобщенный. Для открыто сконструированного типа этот

Окончание таблицы

Метод

Назначение

список может содержать как аргументы, так и параметры типа.

(Более подробно обобщения рассматриваются в главе 18.)

Memberlnfo[]

Получает список членов для заданного типа

GetMembers()

Methodlnfo[]

Получает список методов для заданного типа

GetMethods()

Propertylnfo[]

Получает список свойств для заданного типа

GetProperties ()

Далее приведен ряд наиболее часто используемых свойств, доступных только для

чтения и определенных в классе Туре.

Свойство

Назначение

Assembly Assembly

Получает сборку для заданного типа

TypeAttributes Attributes Получает атрибуты для заданного типа

Type BaseType

Получает непосредственный базовый тип для заданно

го типа

string FullName

Получает полное имя заданного типа

bool IsAbstract

Истинно, если заданный тип является абстрактным

bool isArray

Истинно, если заданный тип является массивом

bool IsClass

Истинно, если заданный тип является классом

bool IsEnum

Истинно, если заданный тип является перечислением

bool IsGenericParameter Истинно, если заданный

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату