严格地讲,拆箱操作不会拷贝任何字段.但通常情况下,拆箱操作后会紧跟着一个字段拷贝操作,将字段从托管堆拷贝到堆栈中。实际上,在C#中,拆箱操作总是紧跟着一个字符拷贝操作.看下面的代码:
static void Main(){
Point p;
p.x=p.y=1;
Object o=p; //对p进行装箱;o指向已装箱对象
p=(point)o; //对o进行拆箱,并将字段从托管堆拷贝到堆栈上
}
对于上面最后一行代码,C#编译器会产生一个对o执行拆箱操作的IL指令(获取对象中属于值类型部分的字段地址),以及另一个将字段从托管堆拷贝到堆栈变量p上的IL指令.

本文解释了在C#中拆箱操作的概念及其通常伴随的字段拷贝过程。通过一个具体的代码示例,展示了如何从托管堆中将值类型的数据拷贝到堆栈。
3601

被折叠的 条评论
为什么被折叠?



