Выбрать главу

// Продемонстрировать применение оператора typeof.

using System; using System.10;

class UseTypeof {

static void Main() {

Type t = typeof(StreamReader);

Console.WriteLine(t.FullName);

if (t.IsClass) Console.WriteLine("Относится к классу."); if (t.IsAbstract) Console.WriteLine("Является абстрактным классом."); else Console.WriteLine("Является конкретным классом.");

}

}

Эта программа дает следующий результат.

System.10.StreamReader Относится к классу.

Является конкретным классом.

В данной программе сначала извлекается объект класса Туре, описывающий тип StreamReader. Затем выводится полное имя этого типа данных и определяется его принадлежность к классу, а далее — к абстрактному или конкретному классу.

Рефлексия

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

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