Конструкторы конкретного типа получаются при вызове методаGetConstructors для объекта классаТуре.Ниже приведена одна из наиболее часто используемых форм этого метода.
Constructorlnfo[] GetConstructors
МетодGetConstructors возвращает массив объектов классаConstructorlnfo,описывающих конструкторы.
КлассConstructorlnfoявляется производным от абстрактного классаMethodBase,который в свою очередь наследует от классаMemberlnf о.В нем также определен ряд собственных методов. К их числу относится интересующий нас методGetConstructors, возвращающий список параметров, связанных с конструктором. Этот метод действует таким же образом, как и упоминавшийся ранее методGetParameters , определенный в классеMethodlnf о.
Как только будет обнаружен подходящий конструктор, для создания объекта вызывается методInvoke , определенный в классеConstructorlnfo.Ниже приведена одна из форм этого метода.
object Invoke(object[]
Любые аргументы, которые требуется передать методу, указываются в массиве
В приведенном ниже примере программы рефлексия используется для создания экземпляра объекта классаMyClass.
// Создать объект с помощью рефлексии.
using System;
using System.Reflection;
class MyClass { int x; int y;
l
public MyClass(int i) {
Console.WriteLine("Конструирование класса MyClass(int, int). "); x = у = i;
}
public MyClass(int i, int j) {
Console.WriteLine("Конструирование класса MyClass(int, int). "); x = i;
У = j;
Show ;
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("В методе(double, double). ");
x = (int) a; у = (int) b;
Show;
}
public void Show {
Console.WriteLine("Значение x: {0}, значение у: {1}", x, у);
}
}
class InvokeConsDemo { static void Main {
Type t = typeof(MyClass); int val;
// Получить сведения о конструкторе.
Constructorlnfo[] ci = t.GetConstructors;
Console.WriteLine("Доступные конструкторы: "); foreach(Constructorlnfo с in ci) {
// Вывести возвращаемый тип и имя.
Console.Write(" " + t.Name + "(");
// Вывести параметры.