web-dev-qa-db-fra.com

Utilisation de la réflexion C # pour appeler un constructeur

J'ai le scénario suivant:

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

J'appelle ajouter dans une autre classe par:

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

J'ai besoin d'un moyen similaire à l'instruction de réflexion ci-dessus pour créer un nouvel objet de type Addition utilisant Addition(int a)

J'ai donc la chaîne s= "Addition", Je veux créer un nouvel objet en utilisant la réflexion.

Est-ce possible?

86
scatman

Je ne pense pas que GetMethod le fera, non - mais GetConstructor le fera.

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: Oui, Activator.CreateInstance fonctionnera aussi. Utilisez GetConstructor si vous voulez avoir plus de contrôle sur les choses, trouvez les noms de paramètres, etc. Activator.CreateInstance est bien si vous vous voulez appeler le constructeur.

155
Jon Skeet

Oui, vous pouvez utiliser Activator.CreateInstance

44
Ben Voigt