使用Dynamic而不是reflect来按名称调用方法

时间:2011-03-18 21:55:26

标签: c# reflection dynamic .net-4.0 methods

使用.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);
    }

2 个答案:

答案 0 :(得分:7)

C#中的动态类型没有提供 - 您仍然必须在编译时知道要访问的成员的名称。 (你当然可以自己创建一个调用站点,并使用DLR的其他机器来解决问题,但它不会比使用反射更简单,并且它不会真正使用语言< / em>功能。)

答案 1 :(得分:5)

开源框架Impromptu-Interface具有自动化所有管道的方法,以使用DLR来解析really late这样的问题。它比使用空隙返回方法的反射速度快70%。

  public void InvokeMethod(string methodName)
    {
        var reflectOb = new GCS_WebService();
        Impromptu.InvokeMemberAction(reflectOb, methodName)
    }