C#4中的dynamic关键字是否支持扩展方法?

我正在听一个关于C#4 dynamic关键字的讨论,我想知道…这个特性是否与其他.NET特性是正交的,例如它是否支持扩展方法?

 public static class StrExtension { public static string twice(this string str) { return str + str; } } ... dynamic x = "Yo"; x.twice(); // will this work? 

注意:这个问题在C#4出货之前就已经被问到了,这就是为什么它会以将来的forms出现。

从“C#4中的新特性”word doc :

dynamic查找将无法find扩展方法。 扩展方法是否适用取决于调用的静态上下文(即哪些使用子句发生),并且此上下文信息当前不作为有效负载的一部分保存。

这个作品,至less我觉得有趣…

 public static class StrExtension { public static string twice(this string str) { return str + str; } } ... dynamic x = "Yo"; StrExtension.twice(x); 

不过,如果编译器能够在编译时find正确的扩展方法,那么我不明白为什么不能在运行时打包一组扩展方法? 这就像一个非成员方法的V表。

编辑:

这很酷… http://www2.research.att.com/~bs/multimethods.pdf

它不能工作,扩展方法的工作取决于文件中包含的命名空间,据我所知,MSIL不知道文件和命名空间。

您可以为对象创build扩展方法,并将其分配给dynamic

 public static void MyExt(this object o) { dynamic d = o; d.myProp = "foo"; } 

并像这样调用它:

 ClassWithMyProp x; x.MyExt();