在 C# 中从字符串调用函数
我知道在 PHP 中你可以进行这样的调用:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
这在 .Net 中可能吗?
I know in PHP you are able to make a call like:
$function_name = 'hello';
$function_name();
function hello() { echo 'hello'; }
Is this possible in .Net?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
是的。 您可以使用反射。 类似这样:
对于上面的代码,被调用的方法必须具有访问修饰符
public
。 如果调用非公共方法,则需要使用BindingFlags
参数,例如BindingFlags.NonPublic | BindingFlags.Instance
:Yes. You can use reflection. Something like this:
With the above code, the method which is invoked must have access modifier
public
. If calling a non-public method, one needs to use theBindingFlags
parameter, e.g.BindingFlags.NonPublic | BindingFlags.Instance
:您可以使用反射来调用类实例的方法,进行动态方法调用:
假设您在实际实例 (this) 中有一个名为 hello 的方法:
You can invoke methods of a class instance using reflection, doing a dynamic method invocation:
Suppose that you have a method called hello in a the actual instance (this):
This code works in my console .Net application
This code works in my console .Net application
有点切线——如果你想解析和计算包含(嵌套!)函数的整个表达式字符串,请考虑 NCalc (http ://ncalc.codeplex.com/ 和 nuget)
例如。 对项目文档稍加修改:
在 EvaluateFunction 委托中,您将调用现有函数。
A slight tangent -- if you want to parse and evaluate an entire expression string which contains (nested!) functions, consider NCalc (http://ncalc.codeplex.com/ and nuget)
Ex. slightly modified from the project documentation:
And within the
EvaluateFunction
delegate you would call your existing function.