92 votes

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 add 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'une méthode similaire à l'instruction de réflexion ci-dessus pour créer un nouvel objet de type Addition en utilisant les éléments suivants Addition(int a)

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

Est-ce possible ?

160voto

Jon Skeet Points 692016

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

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, découvrez les noms des paramètres, etc. Activator.CreateInstance est génial si vous juste d'appeler le constructeur.

47voto

Ben Voigt Points 151460

Oui, vous pouvez utiliser Activator.CreateInstance

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X