Подтвердить что ты не робот

Использование рефлекса С# для вызова конструктора

У меня есть следующий сценарий:

class Addition{
 public Addition(int a){ a=5; }
 public static int add(int a,int b) {return a+b; }
}

Я вызываю добавление в другой класс:

string s="add";
typeof(Addition).GetMethod(s).Invoke(null, new object[] {10,12}) //this returns 22

Мне нужен способ, аналогичный описанному выше выражению отражения, для создания нового объекта типа Addition с помощью Addition(int a)

Итак, у меня есть строка s= "Addition", я хочу создать новый объект, используя отражение.

Возможно ли это?

4b9b3361

Ответ 1

Я не думаю, что GetMethod сделает это, нет, но GetConstructor будет.

using System;
using System.Reflection;

class Addition
{
    public Addition(int a)
    {
        Console.WriteLine("Constructor called, a={0}", a);
    }
}

class Test
{
    static void Main()
    {
        Type type = typeof(Addition);
        ConstructorInfo ctor = type.GetConstructor(new[] { typeof(int) });
        object instance = ctor.Invoke(new object[] { 10 });
    }
}

EDIT: Да, Activator.CreateInstance тоже будет работать. Используйте GetConstructor, если вы хотите больше контролировать вещи, узнать имена параметров и т.д. Activator.CreateInstance отлично, если вы просто хотите вызвать конструктор.