// Использовать класс MyClass, ничего не зная о нем заранее.

using System;

using System.Reflection;

class ReflectAssemblyDemo { static void Main() { int val;

Assembly asm = Assembly.LoadFrom('MyClasses.exe');

Type[] alltypes = asm.GetTypes();

Type t = alltypes[0]; // использовать первый обнаруженный класс Console.WriteLine ('Использовано: ' + t.Name);

Constructorlnfo [.] ci = t.GetConstructors();

// Использовать первый обнаруженный конструктор.

Parameterlnfо[] cpi = ci[0].GetParameters(); object reflectOb;

if (cpi.Length > 0)    {

object[] consargs = new object[cpi.Length];

// Инициализировать аргументы, fox (int n=0; n < cpi.Length; n+ + ) consargs[n] = 10 + n * 20;

// Сконструировать объект. reflectOb = ci [0] .Invoke(consargs);

} else

reflectOb = ci [0] .Invoke(null);

Console.WriteLine('ХпВызов методов для объекта reflectOb.'); Console.WriteLine();

// Игнорировать наследуемые методы.

MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly |

BindingFlags.Instance | BindingFlags.Public);

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

Console.WriteLine('Вызов метода {0} ', m.Name);

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

Parameterlnfо[] pi = m.GetParameters();

// Выполнить методы, switch(pi.Length) {

case 0: // аргументы отсутствуют if(m.ReturnType == typeof(int))    {

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

Console.WriteLine('Результат: ' + val);

}

else if(m.ReturnType == typeof(void))    {

m. Invoke(reflectOb, null);

}

break;

case 1: // один аргумент

if (pi[0] .ParameterType == typeof(int)) { object[] args = new object[1]; args[0] = 14;

if ((bool) m.Invoke(reflectOb, args))

Console.WriteLine ('Значение 14 находится между x и у'); else

Console.WriteLine ('Значение 14 не находится между х и у');

}

break;

case 2: // два аргумента

if((pi[0].ParameterType == typeof(int)) &&

(pi[1].ParameterType == typeof(int)))    {

object[] args = new object[2]; args[0] = 9;

args[l] = 18;

m.Invoke(reflectOb, args);

}

else if((pi[0].ParameterType == typeof(double)) &&

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

0

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

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