Appeler une méthode sur une classe statique en fonction de son nom de type et des noms de méthodes sous forme de chaînes

Comment pourrais-je appeler une méthode sur une classe statique étant donné le nom de la classe et le nom de la méthode?

Par exemple:

Étant donné System.Environment et GetFolderPath , j’aimerais utiliser Reflection pour appeler Environment.GetFolderPath() .

Juste

 Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments); 

typeName est le nom du type sous forme de chaîne, methodName est le nom de la méthode sous forme de chaîne et arguments est un tableau d’objects contenant les arguments avec lesquels appeler la méthode.

Vous devez d’abord obtenir le type (en itérant sur l’assemblage en utilisant la reflection)

voir ce lien pour plus de détails: http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

Ou utiliser

 Assembly.GetType 

une fois que vous avez le type en main, vous pouvez parcourir les membres en utilisant la reflection ou

 MethodInfo method = typeof(MyClass).GetMethod("MyMethod"); 

vous pouvez ensuite utiliser MethodInfo.Invoke et transmettre des arguments pour appeler la méthode lorsque vous souhaitez l’invoquer.

 System.Reflection.Assembly info = typeof(System.Environment).Assembly; Type t = info.GetType("System.Environment"); MethodInfo m = t.GetMethod("GetFolderPath"); object result = m.Invoke(null, arguments); 

Ici, vous réfléchissez au type nommé Environment et utilisez les méthodes GetPropery et GetGetMethod pour obtenir la méthode get de la propriété Environment.CurrentDirectory , comme so;

 var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod(); var currentDirectory = (ssortingng)getMethod.Invoke(null, null); 

L’appel de la méthode get d’une propriété retourne sa valeur et est équivalent à;

 var value = Environment.CurrentDirectory; 

Voici un aperçu de base de ce que vous feriez:

  1. Analysez tous les objects du domaine d’application actuel – recherchez celui qui correspond à ce que vous savez être le nom de la classe
  2. Récupère la méthode statique avec le nom que vous connaissez sur cet object
  3. L’invoque dynamicment.

Edit: Cela fonctionnera si vous ne connaissez pas l’espace de noms de la classe statique. Sinon, utilisez la solution de Daniel Brückner, qui est beaucoup plus simple.