C# tips —實值型別的裝箱和拆箱

來源:互聯網
上載者:User

裝箱過程,如:
myStruct myobj= new myStruct();
object baseobj =myobj;

在上述隱式轉換中,myobj的內容被複製到堆上,放在一個裝箱的對象上,baseobj對象引用設定為該對象。
讓我們來看看在後台發生什麼吧:實際上在最初定義myStruct結構時,.NET FX 隱式地提供另一個(隱式的)類,即裝箱的myStruct類,它包括與myStruct結構相同的所有欄位,但卻是一個參考型別,儲存在堆上。無論這個實值型別是一個結構,還是一個枚舉,定義它時都存在類似的裝箱參考型別,相對應於所有的基本實值型別,如 int,double和unit。不能也不必在代碼中直接編程訪問這些裝箱類型,但在把一個實值型別轉化為object時,他們是在後台工作的對象。在隱式的把myStruct轉換為object時,會執行個體化一個裝箱的myStruct執行個體,並用myStruct結構中的所有資料進行初始化。

拆箱跟裝箱類似,轉換的過程是把自己裝箱的myStruct對象的欄位複製到一個新的myStruct結構中。

在使用裝箱和拆箱時,這兩個過程都把資料複製到新裝箱和拆箱的對象上。這樣,對裝箱對象的操作就不會影響原來實值型別的內容了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.