日落20190418001 - C#基础之装箱拆箱dodoing

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/minami_takumi/article/details/89376229
(1)装箱过程

客户->银行职员: 需要把我的资产(值)存进保险库(堆)
银行职员->保险库: 找到一个可以放得下这批资产的保险库(分配堆内存)
银行职员->保险库: 还得额外做两个事务,一是对这批资产的类型做标记(类型对象指针),
银行职员->保险库: 二是记录资产信息和加个锁(同步块索引)
银行职员->客户: 您好,保险库开好了
客户->银行职员: 给,这是我要存的资产
银行职员->保险库: 把客户的资产存进保险库(值复制到刚分配的内存堆中)
银行职员->客户: 这是您的资产的所属账户(返回对象地址),
银行职员->客户: 现在您的资产已保管在保险库里(值类型变成引用类型)

客户 银行职员 保险库 需要把我的资产(值)存进保险库(堆) 找到一个可以放得下这批资产的保险库(分配堆内存) 还得额外做两个事务,一是对这批资产的类型做标记(类型对象指针), 二是记录资产信息和加个锁(同步块索引) 您好,保险库开好了 给,这是我要存的资产 把客户的资产存进保险库(值复制到刚分配的内存堆中) 这是您的资产的所属账户(返回对象地址), 现在您的资产已保管在保险库里(值类型变成引用类型) 客户 银行职员 保险库 装箱(boxing)
(2)拆箱过程

客户->银行职员: 我要把我的资产(值)从保险库(堆)取出
银行职员->客户: 好的,请提供您的账户信息
客户->银行职员: 给,这是我的账户信息
银行职员->客户: 好的,已确认您的账户信息,请这边来
客户->银行职员: ?
银行职员->客户: (把客户带到保险库前)这是您的资产,你去保险库取吧
客户->银行职员: What?存进来的时候,不是你替我放的吗?怎么取的时候要自己来?
银行职员->客户: 因为规定(拆箱)只到这步,把资产从保险库取出(从堆中复制到基于栈的实例)是客户的事情
客户->银行职员: #%&^Q#%*

客户 银行职员 我要把我的资产(值)从保险库(堆)取出 好的,请提供您的账户信息 给,这是我的账户信息 好的,已确认您的账户信息,请这边来 (把客户带到保险库前)这是您的资产,你去保险库取吧 What?存进来的时候,不是你替我放的吗?怎么取的时候要自己来? 因为规定(拆箱)只到这步,把资产从保险库取出(从堆中复制到基于栈的实例)是客户的事情 客户 银行职员 拆箱(unboxing)

以上简单回顾。

参考资料:

《CLR via C#(第3版)》第5.3节

猜你喜欢

转载自blog.csdn.net/minami_takumi/article/details/89376229
今日推荐