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);
où 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:
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.