[英]Will the dynamic keyword in C#4 support extension methods?
我正在听 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发布之前提出的,这就是为什么它将来用时态。
来自“C#4中的新功能”一词的文字 :
动态查找将无法找到扩展方法。 扩展方法是否适用取决于调用的静态上下文(即发生使用子句),并且此上下文信息当前不作为有效负载的一部分保留。
这项工作至少让我觉得有趣......
public static class StrExtension
{
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
StrExtension.twice(x);
但是,如果编译器可以在编译时找到正确的扩展方法,那么我不明白为什么它不能打包一组扩展方法以便在运行时查找? 对于非成员方法,它就像一个v表。
编辑:
它无法工作,扩展方法的工作取决于文件中包含命名空间,据我所知,MSIL不知道文件和包含名称空间。
您可以为对象创建扩展方法并将其分配给动态 :
public static void MyExt(this object o) {
dynamic d = o;
d.myProp = "foo";
}
并称之为:
ClassWithMyProp x;
x.MyExt();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.