Console.WriteLine("Найдено: " + temp.Name);
Console.WriteLine ;
// Использовать первый тип, в данном случае — класс MyClass.
Type t = alltypes[0]; // использовать первый найденный класс Console.WriteLine("Использовано: " + t.Name);
// Получить сведения о конструкторе.
Constructorlnfo[] ci = t.GetConstructors ;
Console.WriteLine("Доступные конструкторы: "); foreach(Constructorlnfo с in ci) {
// Вывести возвращаемый тип и имя.
Console.Write(" " + t.Name + "(");
// Вывести параметры.
Parameterlnfo[] pi = с.GetParameters; for(int i=0; i < pi.Length; i++) {
Console.Write(pi[i].ParameterType.Name + " " + pi[i].Name);
if(i+1 < pi.Length) Console.Write(", ");
}
Console.WriteLine (")");
}
Console.WriteLine ;
// Найти подходящий конструктор, int x;
for(x=0; x < ci.Length; x++) {
Parameterlnfo[] pi = ci[x].GetParameters ; if (pi.Length == 2) break;
}
if(x == ci.Length) {
Console.WriteLine("Подходящий конструктор не найден."); return;
}
else
Console.WriteLine("Найден конструктор с двумя параметрами.\n");
// Сконструировать объект, object[] consargs = new object[2]; consargs[0] = 10; consargs[1] = 20;
object reflectOb = ci[x].Invoke(consargs) ;
Console.WriteLine("\пВызов методов для объекта reflectOb."); 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)) {
// Это метод 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 &&
pi[0].ParameterType == typeof(double)) {
// Это метод Set(double, double).
object[] args = new object[2];
args[0] = 1.12;
args[l] = 23.4;
m.Invoke(reflectOb, args);
}
else if(m.Name.CompareTo("Sum")==0) {
val = (int) m.Invoke(reflectOb, null);
Console.WriteLine("Сумма равна " + val);
}
else if(m.Name.CompareTo("IsBetween")==0) {
object[] args = new object[1];
args[0] = 14;
if(
Console.WriteLine("Значение 14 находится между x и у");
}
else ifjm.Name.CompareTo("Show")==0) {
• m.Invoke(reflectOb, null);
}
}
}
}
При выполнении этой программы получается следующий результат.
Найдено: MyClass Найдено: AnotherClass Найдено: Demo
Использовано: MyClass
Доступные конструкторы:
MyClass(Int32 i)
MyClass(Int32 i, Int32 j)
Найден конструктор с двумя параметрами.
Конструирование класса MyClass(int, int)
Значение х: 10, значение у: 20
Вызов методов для объекта reflectOb
Сумма равна 30
Значение 14 находится между х и у