Использование Dynamic вместо отражения для вызова метода по имени - PullRequest
7 голосов
/ 19 марта 2011

Используя .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 ]

7 голосов
/ 19 марта 2011

Динамическая типизация в C # этого не предусматривает - имена членов, к которым вы хотите получить доступ, все еще должны быть известны во время компиляции. (Конечно, вы могли бы создать сайт вызовов самостоятельно и использовать остальную часть механизма DLR для решения проблем, но это было бы не проще, чем с помощью отражения, и на самом деле не было бы использования языка функции.)

5 голосов
/ 21 апреля 2011

Фреймворк с открытым исходным кодом Impromptu-Interface имеет методы, позволяющие автоматизировать всю сантехнику для использования DLR для разрешения действительно поздно , как это. Он работает на 70% быстрее, чем отражение с помощью методов возврата по пустоте.

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