gpt4 book ai didi

c# - C# 中动态数据类型的装箱和拆箱工作原理

转载 作者:行者123 更新时间:2023-11-30 17:39:05 24 4
gpt4 key购买 nike

我知道 C# 中用于类型转换的装箱和拆箱概念。但是它如何在 C# 中用于动态变量。当我们使用动态变量时类型转换是如何发生的。在哪些方面遵循了c#的装箱和拆箱原则

我认为装箱和拆箱不会将动态类型视为对象,因为它们不相同。不知道他们是否遵循相同的装箱和拆箱机制请参阅此链接 dynamic vs object type

当您使用动态时,整个表达式在编译时被视为动态表达式,这导致编译器将所有内容都视为动态并获得运行时绑定(bind)。

这是因为下面这行 str 是动态的

    dynamic str = "22/11/2013 10:31:45 +00:01";
var withOffset = DateTimeOffset.Parse(str);

在编译时 str 是动态的,str 的类型只有在运行时才知道,这就是编译器将 withOffset 视为动态的原因

最佳答案

对象和动力学在装箱和拆箱方面具有相同的行为(您可以在生成的 IL 代码中检查这一点)。

在这种情况下,两者之间的主要区别是:

  • clr 在运行时添加一些 IL 代码,确定它的真实类型以及您可以对其执行的操作(有效负载)。
  • 编译器让你做:

    1.var withOffset = DateTimeOffset.Parse(str);

    2.DateTimeOffset withOffset = DateTimeOffset.Parse(str);

    3.DateTime withOffset = DateTimeOffset.Parse(str);

    但在运行时,clr 确保类型安全,因此如果您编写案例 3,它会编译,但在运行时 clr 将抛出 RuntimeBinderException。

希望对您有所帮助!

关于c# - C# 中动态数据类型的装箱和拆箱工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35957780/

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