小编典典

动态(C# 4)和 var 有什么区别?

all

我已经阅读了大量关于 C# v4 附带的新关键字的文章,但我无法区分“动态”和“var”之间的区别。

这篇文章让我思考了一下,但我仍然看不出有什么不同。

是不是您只能将“var”用作局部变量,而将其用作局部变量和全局变量?

你能显示一些没有动态关键字的代码,然后用动态关键字显示相同的代码吗?


阅读 61

收藏
2022-06-27

共1个答案

小编典典

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键入 为 dynamic 。它不知道,string.Length因为它在编译时
一无所知。s例如,以下代码也可以编译(但不能运行):

dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);

在运行时(仅),它会 检查FlibbleBananaSnowball属性 - 找不到它,并在一阵火花中爆炸。

使用dynamic,属性/方法/运算符/等 在运行时 根据实际对象解析。与 COM(可以具有仅运行时属性)、DLR
或其他动态系统(如javascript.

2022-06-27