аргументов. Так, если требуется передать два аргумента, то массив parameters должен состоять из двух элементов, но не из трех или четырех. Значение, возвращаемое вызываемым методом, передается методу Invoke () , который и возвращает его.

Для вызова конкретного метода достаточно вызвать метод Invoke () для экземпляра объекта типа Methodlnf о, получаемого при вызове метода GetMethods (). Эта процедура демонстрируется в приведенном ниже примере программы.

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

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) {

Console.Write('В методе Set (int, int). ') ; x = a;

У = b;

Show();

}

// Перегрузить метод Set.

public void Set(double a, double b) {

Console.Write('В методе Set(double, double). '); x = (int) a; у = (int) b;

Show () ;

}

public void Show() {

Console.WriteLine('Значение x:    {0},    значение    у:    {1}', x, у);

}

}

class InvokeMethDemo { static void Main() {

Type t = typeof(MyClass);

MyClass reflectOb = new MyClass(10, 20); int val;

Console.WriteLine('Вызов методов, определенных в классе ' + t.Name); Console.WriteLine ();

MethodInfo[] mi = t.GetMethods();

// Вызвать каждый метод, foreach(Methodlnfo m in mi) {

// Получить параметры.

Parameterlnfo[] pi = m.GetParameters() ;

if(m.Name.CompareTo('Set')==0 &&

pi[0].ParameterType == typeof(int)) { object[] args = new object[2]; args[0] = 9; args[l] = 18;

m. Invoke(reflectOb, args);

}

else if(m.Name.CompareTo('Set') ==0 &&

pi[0].ParameterType == typeof(double))    {

object[] args = new object[2]; args[0] = 1.12; args[1] = 23.4; m. Invoke(reflectOb, args);

}

else if(m.Name.CompareTo('Sum')==0)    {

val = (int) m.Invoke(reflectOb, null);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату