取消装箱不会创建值的副本。 这是正确的吗?
我正在阅读微软的Class Room Training Materil。 我读了以下内容
Unboxing Unboxing与拳击相反。 它是将引用类型显式转换为值类型。 取消装箱将检索对象中包含的值类型的引用。 取消装箱操作涉及检查对象实例以确保对象实例是给定值类型的装箱值。 然后,将实例中的值复制到值类型变量中。
**
取消装箱会返回指向装箱对象内数据的指针,而不会创建数据副本。
**
我真的不明白我突出的界限。 它说当拆箱装箱对象时,它不会创建副本,它只返回一个指针。 如果这是真的,那么值类型变量将在Heap中分配吗?
内存
嗯,这是真的,但不是全局。
拆箱本身只返回指向数据的指针,但您无法使用它来访问C#中的数据。 如果在C#中取消装箱值,则始终将其复制到某处。
例:
object o = 42; //box int i = (int)o; //unbox
unboxing iself获取指向对象o
的值42
的指针,然后将值复制到变量i
。
除了Guffa所说的,还有一些额外的信息:
据我所知,C#编译器从不使用unbox
或ldobj
,它总是使用unbox.any
进行拆箱,而ldind.*
用于取消引用引用(例如ref
/ out
参数)。
上述就是C#学习教程:取消装箱不会创建值的副本。 这是正确的吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1019311.html