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表。
编辑:
它不能工作,扩展方法的工作取决于文件中包含的命名空间,据我所知,MSIL不知道文件和命名空间。
您可以为对象创build扩展方法,并将其分配给dynamic :
public static void MyExt(this object o) { dynamic d = o; d.myProp = "foo"; }
并像这样调用它:
ClassWithMyProp x; x.MyExt();