(', ');
}
Console.WriteLine(')');
}
Console.WriteLine ();
// Найти подходящий конструктор, int х;
for(x=0; х < ci.Length; х++) {
Parametgrlnfo[] pi = ci[x].GetParameters(); if(pi.Length == 2) break;
}
if (x == ci.Length) {
Console.WriteLine('Подходящий конструктор не найден.'); return;
}
else
Console.WriteLine('Найден конструктор с двумя параметрами. ');
// Сконструировать объект, object[] consargs = new object[2]; consargs[0] = 10; consargs[1] = 20;
object reflectOb = ci[x].Invoke(consargs) ;
Console.WriteLine('ХпВызов методов для объекта reflectOb.'); Console.WriteLine() ;
Methodlnfo[] mi = t.GetMethods();
// Вызвать каждый метод, foreach(Methodlnfo m in mi) {
// Получить параметры.
Parameterlnfo[] pi = m.GetParameters() ; if(m.Name.CompareTo('Set')==0 &&
pi[0].ParameterType == typeof(int)) {
// Это метод Set (int, int). object[] args = new object[2]; args[0] = 9; args[l] = 18;
m. Invoke(reflectOb, args);
}
else if(m.Name.CompareTo('Set')==0 &&
object[] args = new object[1]; args[.0] = 14;
if ((bool) m.Invoke(reflectOb, args))
Console.WriteLine ('Значение 14 находится между x и у');
else if(m.Name.CompareTo('Show')==0) {
m.Invoke(reflectOb, null);
}
}
}
}
Эта программа дает следующий результат.
Доступные конструкторы:
MyClass(Int32 i)
MyClass(Int32 i, Int32 j)
Найден конструктор с двумя параметрами.
Конструирование класса MyClass(int, int)
Значение х: 10, значение у: 20
Вызов методов для объекта reflectOb
Сумма равна 30
Значение 14 находится между х и у
В методе Set(int, int). Значение х: 9, значение у: 18 В методе Set(double, double). Значение х: 1, значение у: 23 Значение х: 1, значение у: 23
А теперь рассмотрим порядок применения рефлексии для конструирования объекта класса MyClass. Сначала получается перечень открытых конструкторов в следующей строке кода.
