Pregunta Usando la reflexión de C # para llamar a un constructor


Tengo el siguiente escenario:

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

Estoy llamando agregar en otra clase por:

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

Necesito una forma similar a la declaración de reflexión anterior para crear un nuevo objeto de tipo Adición usando Addition(int a) 

Así que tengo una cuerda s= "Addition", Quiero crear un nuevo objeto usando la reflexión.

es posible?


74
2017-07-15 12:59


origen


Respuestas:


No creo GetMethod lo hará, no, pero GetConstructor será.

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 });
    }
}

EDITAR: Sí, Activator.CreateInstance funcionará también Utilizar GetConstructor si desea tener más control sobre las cosas, descubra los nombres de los parámetros, etc. Activator.CreateInstance es genial si sólo Sin embargo, quiero llamar al constructor.


135
2017-07-15 13:00



Sí, puedes usar Activator.CreateInstance


40
2017-07-15 13:00