標籤:
C#中實值型別和和參考型別實質上是同源的,所以不但可以從實值型別和參考型別之間進行轉換,也可以在實值型別和參考型別之間進行轉換。,但是兩者使用的記憶體類型不同,使他們的轉換變得複雜。
1.裝箱:
在C#中通常將實值型別轉換成參考型別叫做裝箱。
C#中實值型別裝箱為參考型別的過程如下:
- 在託管堆中建立一個新的對象執行個體,並分配相應的記憶體。
- 將實值型別變數值複製到對象執行個體中。
- 將對象執行個體地址壓入堆棧中,並指向一個參考型別。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int mm = 50; //定義實值型別變數 object nn = mm; //將實值型別變數裝箱到引用型類型匯總 Console.WriteLine("值為{0},裝箱對象為{1}",nn,mm); mm = 100; //改變值 Console.WriteLine("值為{0},裝箱對象為{1}", mm, nn); Console.ReadKey(); } }}
運行結果如下:
2.拆箱:
在C#中通常將參考型別轉換成實值型別叫做拆箱。C#中一個參考型別拆箱成一個實值型別的流程如下:
- 檢查該對象的執行個體是否是某個給定的實值型別裝箱後的值。
- 如果是則將值從執行個體中複製出來。
- 賦值給實值型別變數。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int mm = 50; object nn = mm; Console.WriteLine("裝箱:值為{0},裝箱對象為{1}", mm, nn); int zz = (int)nn;//unboxing=拆箱 Console.WriteLine("拆箱:裝箱對象為{0},值為:{1}",nn , zz); Console.ReadKey(); } }}
C#之裝箱與拆箱