gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:29:53 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com