Создание объекта при помощи рефлексии

243
11 июня 2018, 01:50

Хочу узнать, как с помощью рефлексии создать объект класса, у которого явно прописан конструктор. Предположим есть класс Student:

class Student
{
    private int _temp = 10;
    private string name = "Vasya";
}

В таком случае использование рефлексии при создании экземпляра выглядит следующим образом:

class Program
{  
    static void Main(string[] args)
    {
        Type type = typeof(Student);
        ConstructorInfo info = type.GetConstructor(new Type[] { });
        object student = info.Invoke(new object[] { });
     }
}

Но если в моем студенте появится явно прописанный конструктор, например такой:

class Student
{
    private int temp;
    private string name;
    public Student(int temp, string name)
    {
        this.temp = temp;
        this.name = name;
    }
}

то как именно я должен передать параметры в вызывающей части программы? А именно тут:

 ConstructorInfo info = type.GetConstructor(new Type[] { });
 object student = info.Invoke(new object[] { });
Answer 1

Нужно получить такой конструктор:

ConstructorInfo info = type.GetConstructor(new Type[] { typeof(int), typeof(string) });

И передать в него параметры:

object student = info.Invoke(new object[] { 20, "Petya" });
Answer 2

Почему бы не просто

var student = (Student)Activator.CreateInstance(typeof(Student), 1, "Vasya");
READ ALSO
Внешнее левое соединение c# LINQ [закрыт]

Внешнее левое соединение c# LINQ [закрыт]

Как с помощью этого средства сделать дозапись данных в Json:

258
DateTimePicker сравнение двух дат

DateTimePicker сравнение двух дат

Есть два DateTimePicker'a

177
Поиск в TreeView

Поиск в TreeView

Прохожусь по столбцу в dataGridView и если есть значение, которого нет в TreeView, то оно должно добавляетсяНа деле существующие значения дублируются

255