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

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

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

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

Parameterlnfо[] GetParameters();

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

В качестве примера ниже приведена программа, в которой рефлексия используется для получения методов, поддерживаемых классом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);

}

}

class ReflectDemo { static void Main() {

Type t = typeof(MyClass); // получить объект класса Type,

// представляющий класс MyClass

Console.WriteLine("Анализ методов, определенных " +

"в классе " + t.Name);

Console.WriteLine ();

Console.WriteLine("Поддерживаемые методы: ");

MethodInfo[] mi = t.GetMethods();

// Вывести методы, поддерживаемые в классе MyClass. foreach(Methodlnfo m in mi) {

// Вывести возвращаемый тип и имя каждого метода.

Console.Write(" " + m.ReturnType.Name + " " + m.Name + "(");

// Вывести параметры.

Parameterlnfo[] pi = m.GetParameters() ; for(int i=0; i < pi.Length; i++)    {

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

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