тип является параметром
обобщенного типа. (Более подробно обобщения рас
сматриваются в главе 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;
public MyClass(int i, int j) { x = i ;
У = j;
}
public int Sum() { return x+y;
}
public bool IsBetween(int i) { if(x < i && i < y) return true; else return false;
}
public void Set(int a, int b) { x = a;
У = b;
}
public void Set(double a, double b) { x = (int) a; у = (int) b;
}
public void Show() {
Console.WriteLine(' x: {0}, у: {1}', x, y);
