【发布时间】:2014-07-10 22:55:12
【问题描述】:
C# 中的“dynamic”关键字是否像 C++ 中的“auto”一样工作
更多细节:
auto a = 5; //C++
dynamic a = 5; //C#
它们相似吗?
【问题讨论】:
-
auto在编译时解析,而dynamic在运行时解析。
标签: c# c++ dynamic syntax reference
C# 中的“dynamic”关键字是否像 C++ 中的“auto”一样工作
更多细节:
auto a = 5; //C++
dynamic a = 5; //C#
它们相似吗?
【问题讨论】:
auto 在编译时解析,而dynamic 在运行时解析。
标签: c# c++ dynamic syntax reference
不,它们不相似。 AFAIK,auto 将类似于 C# 中的var。
auto 被解析为编译时,而不是运行时。
来自 MSDN
auto 关键字指示编译器使用初始化 声明变量的表达式以推断其类型。
所以在你的代码中
auto a = 5; //C++
a.ToUpper(); // Compile time error
但是
dynamic a = 5; //C#
a.ToUpper(); //No error at compile time since it will resolve @ runtime
但在运行时会抛出错误,因为int 类型没有ToUpper() 方法
【讨论】:
没有。
在 C# 中 auto 的等价物是 var - 编译器将推断出适当的类型。 dynamic 是在运行时确定的,所以它永远不会抛出编译错误。来自 MSDN:
“在编译时,假定类型为动态的元素支持任何操作。”
如果代码无效,它会在运行时抛出错误。
【讨论】: