Вход/Регистрация
C# 4.0 полное руководство - 2011
вернуться

Шилдт Герберт

Шрифт:

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 имеет ясную логическую структуру, а следовательно, уяснив одну его часть, нетрудно понять и все остальное. Принимая во внимание это обстоятельство, в последующих разделах демонстрируются четыре основных способа применения рефлексии: получение сведений о методах, вызов методов, конструирование объектов и загрузка типов данных из сборок.

Получение сведений о методах

Имея в своем распоряжении объект класса Туре, можно получить список методов, поддерживаемых отдельным типом данных, используя метод GetMethods . Ниже приведена одна из форм, подходящих для этой цели.

MethodInfo[] GetMethods

Этот метод возвращает массив объектов класса Methodlnf о, которые описывают методы, поддерживаемые вызывающим типом. Класс Methodlnfo находится в пространстве имен System.Reflection.

Класс Methodlnfo является производным от абстрактного класса MethodBase, который в свою очередь наследует от класса Member Inf о. Это дает возможность пользоваться всеми свойствами и методами, определенными в этих трех классах. Например, для получения имени метода служит свойство Name. Особый интерес вызывают два члена класса Methodlnfo: ReturnType и GetParameters .

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

Метод GetParameters возвращает список параметров, связанных с анализируемым методом. Ниже приведена его общая форма.

Parameterlnfо[] GetParameters;

Сведения о параметрах содержатся в объекте класса Parameter Inf о. В классе Parameterlnf о определено немало свойств и методов, описывающих параметры. Особое значение имеют два свойства: Name — представляет собой строку, содержащую имя параметра, a ParameterType — описывает тип параметра, который инкапсулирован в объекте класса Туре.

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

// Анализ методов с помощью рефлексии.

using System;

using System.Reflection;

class MyClass { int x; int y;

  • Читать дальше
  • 1
  • ...
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: