Использование отражения C # для вызова конструктора - PullRequest
85 голосов
/ 15 июля 2010

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

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", я хочу создать новый объект с помощью отражения.

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

Ответы [ 2 ]

153 голосов
/ 15 июля 2010

Я не думаю, что 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 });
    }
}

РЕДАКТИРОВАТЬ: Да, Activator.CreateInstance тоже будет работать.Используйте GetConstructor, если вы хотите иметь больше контроля над вещами, узнать имена параметров и т. Д. Activator.CreateInstance замечательно, если вы просто хотите вызвать конструктор.

44 голосов
/ 15 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...