我已经阅读了大量关于 C# v4 附带的新关键字的文章,但我无法区分“dynamic”和“var”。
This article让我想了想,但我仍然看不出有什么不同。
是不是您只能将“var”用作局部变量,但既可以用作局部变量又可以用作全局变量?
你能显示一些没有动态关键字的代码,然后显示带有动态关键字的相同代码吗?
最佳答案
var
是静态类型的 - 编译器和运行时知道类型 - 它们只是为你节省了一些输入...以下是 100% 相同的:
var s = "abc";
Console.WriteLine(s.Length);
和
string s = "abc";
Console.WriteLine(s.Length);
所发生的一切是编译器发现s
必须是一个字符串(来自初始化器)。在这两种情况下,它都知道(在 IL 中)s.Length
表示(实例)string.Length
属性。
dynamic
是一个非常不同的野兽;它与 object
最相似,但具有动态调度:
dynamic s = "abc";
Console.WriteLine(s.Length);
此处,s
的类型是动态。它不知道 string.Length
,因为它在编译时不知道关于 s
的任何。例如,以下也会编译(但不会运行):
dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);
在运行时(仅),它会检查 FlibbleBananaSnowball
属性 - 找不到它,并在一阵 Spark 中爆炸。
使用dynamic
,属性/方法/运算符/等根据实际对象在运行时解析。与 COM(可以具有仅运行时属性)、DLR 或其他动态系统(如 javascript
)对话非常方便。
关于c# - dynamic (C# 4) 和 var 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961581/