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


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

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

Я вызываю add в другом классе:

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

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

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

это возможно?

2 76

2 ответа:

не думаю 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 - это замечательно, если вы просто хочу вызвать конструктор.

Да, вы можете использовать Activator.CreateInstance