日落20190418001 - C#基礎之裝箱拆箱Story

(1)裝箱過程

客戶->銀行職員: 需要把我的資產(值)存進保險庫(堆)
銀行職員->保險庫: 找到一個可以放得下這批資產的保險庫(分配堆內存)
銀行職員->保險庫: 還得額外做兩個事務,一是對這批資產的類型做標記(類型對象指針),
銀行職員->保險庫: 二是記錄資產信息和加個鎖(同步塊索引)
銀行職員->客戶: 您好,保險庫開好了
客戶->銀行職員: 給,這是我要存的資產
銀行職員->保險庫: 把客戶的資產存進保險庫(值複製到剛分配的內存堆中)
銀行職員->客戶: 這是您的資產的所屬賬戶(返回對象地址),
銀行職員->客戶: 現在您的資產已保管在保險庫裏(值類型變成引用類型)

客戶銀行職員保險庫需要把我的資產(值)存進保險庫(堆)找到一個可以放得下這批資產的保險庫(分配堆內存)還得額外做兩個事務,一是對這批資產的類型做標記(類型對象指針),二是記錄資產信息和加個鎖(同步塊索引)您好,保險庫開好了給,這是我要存的資產把客戶的資產存進保險庫(值複製到剛分配的內存堆中)這是您的資產的所屬賬戶(返回對象地址),現在您的資產已保管在保險庫裏(值類型變成引用類型)客戶銀行職員保險庫裝箱(boxing)
(2)拆箱過程

客戶->銀行職員: 我要把我的資產(值)從保險庫(堆)取出
銀行職員->客戶: 好的,請提供您的賬戶信息
客戶->銀行職員: 給,這是我的賬戶信息
銀行職員->客戶: 好的,已確認您的賬戶信息,請這邊來
客戶->銀行職員: ?
銀行職員->客戶: (把客戶帶到保險庫前)這是您的資產,你去保險庫取吧
客戶->銀行職員: What?存進來的時候,不是你替我放的嗎?怎麼取的時候要自己來?
銀行職員->客戶: 因爲規定(拆箱)只到這步,把資產從保險庫取出(從堆中複製到基於棧的實例)是客戶的事情
客戶->銀行職員: #%&^Q#%*

客戶銀行職員我要把我的資產(值)從保險庫(堆)取出好的,請提供您的賬戶信息給,這是我的賬戶信息好的,已確認您的賬戶信息,請這邊來(把客戶帶到保險庫前)這是您的資產,你去保險庫取吧What?存進來的時候,不是你替我放的嗎?怎麼取的時候要自己來?因爲規定(拆箱)只到這步,把資產從保險庫取出(從堆中複製到基於棧的實例)是客戶的事情客戶銀行職員拆箱(unboxing)

以上簡單回顧。

參考資料:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章