【发布时间】:2016-06-27 17:38:06
【问题描述】:
我知道 C# 用于类型转换的装箱和拆箱概念。但是它如何在 C# 中用于动态变量。当我们使用动态变量时,类型转换是如何发生的。在哪方面遵循了c#的装箱和拆箱原则
我认为装箱和拆箱不会将动态类型视为对象,因为它们不同。不知道他们是否遵循相同的装箱和拆箱机制 看这个链接dynamic vs object type
当您使用动态时,整个表达式在编译时被视为动态表达式,这导致编译器将所有内容都视为动态并获得运行时绑定。
这是因为下面的 str 是动态的
dynamic str = "22/11/2013 10:31:45 +00:01";
var withOffset = DateTimeOffset.Parse(str);
在编译时 str 是动态的,str 的类型只能在运行时知道,这就是编译器将 withOffset 视为动态的原因
【问题讨论】:
-
dynamic 关键字是 object 的别名。值总是装箱,对象从不装箱。永远不需要帮助,你也不能。
-
你是想说动态变量和对象是一样的吗?我不确定这个
-
是动态的装箱和拆箱以及对象相同
-
我认为动态和对象是不一样的。看这里 - stackoverflow.com/questions/3442821/dynamic-vs-object-type 你是想说装箱和拆箱是一样的
-
它们在运行时是一样的,CLR不区分动态和对象。所以拳击行为是相同的。在编译时很重要,使用动态使 C# 编译器生成代码以使用 C# 绑定器到 DLR(动态语言运行时)。它优化了动态代码,例如反射、后期绑定 COM 以及与 Python 和 Ruby 等语言的互操作。通常是反射。
标签: c# c#-4.0 type-conversion boxing unboxing