c# - dynamic (C# 4) 和 var 有什么区别?

标签 c# dynamic

我已经阅读了大量关于 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/

相关文章:

c# - Telerik RadComboBox 未构建

c# - 将窗口停靠为工具栏

objective-c - 为什么要使用 performSelector :withObject:withObject at runtime if you know both the selector and its arguments at compile time?

c++ - 如何在 C++ 中使用 boost::dynamic_bitset

c - 释放结构指针是否也会释放 C 中结构内部分配的内存?

javascript - Highcharts - 更新特定类别值

javascript - 为所有用户动态更新页面的一部分

C# 午夜计时器过早调用

c# - lambda 表达式有什么意义?

c# - 如何解析日期后缀为 "th"、 "st"或 "nd"的日期?