为什么动态对象和扩展方法不好玩?

时间:2014-11-18 14:48:40

标签: c# .net dynamic .net-4.0 dynamic-language-runtime

异常的原因:

  

无法动态调度扩展方法。考虑转换动态参数或调用扩展方法而不使用扩展方法语法。

已经涵盖了几个SO问题(herehere)。但没有人说过为什么框架不允许这样做:


实施例

public static class ExampleExtension
{
    public static string HelloWorld(this object o, object o2)
    {
        return "Hello World";
    }

    public static void Test()
    {
        dynamic dynamicObject = new object();

        //Exception
        new object().HelloWorld(dynamicObject);

        //No Exception
        ExampleExtension.HelloWorld(new object(), dynamicObject);
    }
}

  

new object()。HelloWorld(dynamicObject)`不好


  

ExampleExtension.HelloWorld(new object(),dynamicObject)`很好


为什么?

如果扩展方法基本上只是用于调用静态方法的语法糖,那么无论如何都不会将new object().HelloWolrd()转换为编译器到ExampleExtension.HelloWorld(new object())?那么为什么DLR可以处理这个呢?

0 个答案:

没有答案