Here is what i want to do, and i know it is possible with perl, php, python and java, but i am working with c#
how can i do the following:
public void amethod(string functionName)
{
AVeryLargeWebServiceWithLotsOfMethodsToCall.getFunctionName();
}
I want to pass the functionName to the method and I want it to be executed as above.
How this can be done?
Do i need ANTLR or any other tool for this?
Thanks.
You can execute a method by name via Reflection. You need to know the type, as well as the method name (which can be the current object's type, or a method on a different object, or a static type). It looks like you want something like:
public void amethod(string functionName)
{
Type type = typeof(AVeryLargeWebServiceWithLotsOfMethodsToCall);
MethodInfo method = type.GetMethod(functionName, BindingFlags.Public | BindingFlags.Static);
method.Invoke(null,null); // Static methods, with no parameters
}
Edit in response to comment:
It sounds like you actually want to get a result back from this method. If that's the case, given that it's still a static method on the service (which is my guess, given what you wrote), you can do this. MethodInfo.Invoke will return the method's return value as an Object directly, so, if, for example, you were returning a string, you could do:
public string amethod(string functionName)
{
Type type = typeof(AVeryLargeWebServiceWithLotsOfMethodsToCall);
MethodInfo method = type.GetMethod(functionName, BindingFlags.Public | BindingFlags.Static);
object result = method.Invoke(null,null); // Static methods, with no parameters
if (result == null)
return string.Empty;
return result.ToString();
// Could also be return (int)result;, if it was an integer (boxed to an object), etc.
}
Executing a string as if it were code is possible in c#, but it's not pretty or simple. It's also considered poor practice and insecure (you probably should avoid it in dynamic languages, too).
Instead, do something like this:
public void amethod(Action actionParam)
{
actionParam();
}
Now, in your case you want to call a web service. Since that ultimately comes down to xml anyway you have a couple options:
Are you saying that AVeryLargeWebServiceWithLotsOfMethodsToCall
is an instance of an object on which you want to invoke a method named functionName
? If so:
MethodInfo method = AVeryLargeWebServiceWithLotsOfMethodsToCall.GetType().GetMethod(functionName);
method.Invoke(AVeryLargerWebServiceWithLotsOfMethodsToCall, null);
Or is AVeryLargeWebServiceWithLotsOfMethodsToCall
a type on which you want to invoke a static method named functionName
? If so:
MethodInfo method = typeof(AVeryLargeWebServiceWithLotsOfMethodsToCall).GetMethod(functionName);
method.Invoke(null, null);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With