使用动态而不是反射来按名称调用方法
使用.NET-4.0,我将如何使用 Dynamic 来完成以下任务而不使用反射?
public void InvokeMethod(string methodName)
{
Type t = typeof(GCS_WebService);
GCS_WebService reflectOb = new GCS_WebService();
MethodInfo m = t.GetMethod(methodName);
m.Invoke(reflectOb, null);
}
Using .NET-4.0, how would I use Dynamic to accomplish the following without using reflection?
public void InvokeMethod(string methodName)
{
Type t = typeof(GCS_WebService);
GCS_WebService reflectOb = new GCS_WebService();
MethodInfo m = t.GetMethod(methodName);
m.Invoke(reflectOb, null);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
C# 中的动态类型并没有提供这一点 - 您想要访问的成员的名称仍然必须在编译时已知。 (当然,您可以自己创建调用站点并使用 DLR 的其余机制来解决问题,但这不会比使用反射更简单,而且它不会真正使用语言< /em> 功能。)
Dynamic typing in C# doesn't provide for that - the names of the members you want to access still has to be known at compile-time. (You could create the call site yourself of course and use the rest of the machinery of the DLR to resolve things, but it wouldn't be any simpler than using reflection, and it wouldn't really be using the language features.)
开源框架Impromptu-Interface 具有自动执行所有管道以使用 DLR 的方法像这样解决真的晚了。它的运行速度比使用 void 返回方法的反射快 70%。
The open source framework Impromptu-Interface has methods the automate all the plumbing to use the DLR to resolve really late like this. It runs 70% faster than reflection with void returning methods.