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

Многие классы, поддерживающие рефлексию, входят в состав прикладного интерфейса .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(), возвращающий сведения

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

Перейти на страницу:

Похожие книги