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

C#4中的dynamic关键字是否支持扩展方法?,c#,dynamic,extension-methods,c#-4.0,C#,Dynamic,Extension Methods,C# 4.0,我是关于C#4的动态关键字,我想知道。。。此功能是否与其他.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的动态关键字,我想知道。。。此功能是否与其他.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发货之前提出的,这就是为什么它用将来时态表达的原因。

来自:

动态查找将无法执行 查找扩展方法。是否 是否应用扩展方法取决于 关于调用的静态上下文 (即出现哪些使用条款),以及 此上下文信息不可用 当前作为有效载荷的一部分保留


它不能工作,扩展方法的工作取决于文件中包含名称空间,而据我所知,MSIL对文件和包含名称空间一无所知

至少我觉得这很有趣

public static class StrExtension
{
   public static string twice(this string str) { return str + str; }
}

...
dynamic x = "Yo";
StrExtension.twice(x);
不过,如果编译器在编译时能够找到正确的扩展方法,那么我不明白为什么它不能打包一组扩展方法,以便在运行时查找?对于非成员方法,它就像一个v形表

编辑:


这很酷

您可以为对象创建扩展方法并将其指定给动态:

这样称呼它:

ClassWithMyProp x;
x.MyExt();

真棒的问题。我的猜测是“不”,因为它们不是课堂的一部分,也不能通过反思获得。我也猜是“不”。但我认为这是可行的:var x=“Y0”;x、 两次();乔尔,这一切都准备好了。改变它将是一个突破性的改变好吧,那很奇怪。。。这突然从三个答案变成了一个。我猜当我删除了我的错误答案时,另一个人删除了他的“不太正确的答案”…jon,在一句简短的话中(只是为了理解)dynamic不支持扩展方法的确切原因是什么?@RoyiNamir扩展方法的魔力似乎是编译时构造。在运行时,C#并没有在命名空间中找到每个扩展方法的状态,这是一个性能问题。。。这应该一直有效:)
ClassWithMyProp x;
x.MyExt();