2016-01-27 1 views
-3

Je veux invoquer une classe « *** » est la solution qui fonctionne pour moi, mais je veux invoquer CECI EST LA SOLUTION QUE ME DONNE L'ERREUR:invoquer la méthode non statique C#

Type t = Type.GetType(svClass); 
MethodInfo method = t.GetMethod("execute", BindingFlags.instance| BindingFlags.Public); 

Ret = (string)method.Invoke(null, new object[] { context.Request}); 
    public string execute(HttpRequest req) 

pour que j'essayé de MethodInfo method = t.GetMethod("execute", BindingFlags.instance | BindingFlags.Public);

mais il me donne l'erreur « méthode non statique nécessite une cible »

*** CECI EST lA SOLUTION dE TRAVAIL pOUR sTATIC mÉTHODE

Type t = Type.GetType(svClass); 
MethodInfo method = t.GetMethod("execute", BindingFlags.static| BindingFlags.Public); 

Ret = (string)method.Invoke(null, new object[] { context.Request}); 

invoquer

public class XXXXX 
    { 
     public static string execute(HttpRequest req){} 
    } 
+6

Vous devez appeler une méthode non statique sur une instance. –

+0

Mais il fait de ce que je vois, le problème serait avec des drapeaux de liaison. –

+0

oui donc j'essaye public string d'exécuter (HttpRequest req) {} et BindingFlags.instance – lol

Répondre

1

Le secret est de changer vos drapeaux de liaison pour obtenir un MethodInfo qui correspond à la signature de la méthode que vous souhaitez appeler.

Par exemple:

public static string execute(HttpRequest req){} 

sera accessible via

MethodInfo method = t.GetMethod("execute", BindingFlags.static| BindingFlags.Public); 

Toutefois, pour accéder

public string execute(HttpRequest req){} 

vous devez faire

var classObj = new Class(); 
MethodInfo method = classObj.GetType().GetMethod("execute", BindingFlags.Instance| BindingFlags.Public); 

L'instance signifie que la méthode est membre d'un objet de classe et non du type de classe. (instance vs statique)

var parameterArray = new object[]{ YourHttpRequestHere}; 
var result = method.Invoke(classObj,parameterArray); 

Alors souvenez-vous, si la méthode appartient à une instance, alors vous devez saisir la méthode de ce type d'instance, et vous avez besoin de l'invoquer avec une référence à la variable d'instance (classObj) ci-dessus.

+0

Merci, le problème est que le nom de la classe est passé comme un paramètre d'entrée, donc pour cela, je l'ai lu dans une chaîne 'xvClass' puis Type t = Type.GetType (svClass); et -> Méthode MethodInfo = t.GetMethod ("execute", BindingFlags.static | BindingFlags.Public); Pour faire un objet de ma classe je ne sais pas comment je peux le faire avec le nom de la classe dans une chaîne – lol

+0

cette réponse devrait avoir 100 upvotes – LastTribunal