【发布时间】:2015-07-07 11:19:38
【问题描述】:
在动态表达式dynamic x 中,是否有原因/解释
为什么周围的表达式(例如foo(x))也会变得动态?
考虑:
static string foo(object x) { }
static void Main()
{
dynamic x = null;
foo(x); // foo(x) is a dynamic expression
}
我假设编译器可以解析(在编译时)foo(object) 将被调用。但是,将鼠标悬停在 foo(x) 上会显示该类型是动态的。
我可以通过指定来帮助编译器进行推导:
foo((object)x);
但我认为dynamic 表达式的类型是object。
C# 参考确实说“包含动态类型表达式的操作未解析”,我的问题是:
是否存在阻止编译器解析“外部”/周围表达式类型的原因?
参考
在大多数情况下,动态类型的行为类似于类型对象。但是,包含动态类型表达式的操作不会被编译器解析或类型检查。编译器将有关操作的信息打包在一起,这些信息稍后用于在运行时评估操作。作为该过程的一部分,动态类型的变量被编译为对象类型的变量。因此,动态类型只存在于编译时,而不存在于运行时。
【问题讨论】:
-
Eric Lippert(如果你不知道的话,他是 C# 编译器背后的主要人物之一)有一篇关于这个主题的精彩博文(系列) - blogs.msdn.com/b/ericlippert/archive/2012/11/05/…
-
周围的表达式是指方法签名吗?
-
其实他之前的一篇博文回答了我的问题:blogs.msdn.com/b/ericlippert/archive/2012/10/22/…
标签: c#