1. 程式人生 > >C#裝箱和拆箱

C#裝箱和拆箱

net type tro nbsp 繼承 不一致 使用 sys 原因

C#裝箱和拆箱詳解

.net裝箱和拆箱是.net framework框架模型了值類型和引用類型之間的轉換發的過程, 值類型和引用類型之間可以轉換的原因是值類型繼承於System.ValueType,但 System.ValueType類型又繼承於System.Object。Object類型是萬物之源。

裝箱是值類型到引用類型的轉換,拆箱是引用類型到值類型之間的轉換

裝箱的原理:

int a =9;
Object b = a;

1.當發生裝箱的時候,在托管堆裏分配內存,內存大小為值類型的內存大小和額外的內存,會把值類型的值復制一份,拷貝到該堆內存裏即可。
2.然後返回該堆內存裏的地址,將該地址返回給Object對象b。
3.裝箱效率低,原因為需要在堆內分配內存,同時還要拷貝值都要占用效率,性能低下。同時a的值和對象b之間並無任何關系。

拆箱原理

int c = (int)b;

1.當發生拆箱的時候,會檢測b是否為NULL,當為NULL時候會拋出異常,同時檢測b對象裏的值類型是否和轉換的類型是否一致,若不一致,也會報錯
2.若檢測無誤後,會在棧內存裏分配內存,同時引用對象裏的值復制一份到棧內存裏,
3.拆箱性能損耗較少,和裝箱性能損耗相比,較輕。同時c和對象b之間並無任何關系

拆箱和裝箱的使用

拆箱和裝箱之間對性能損耗很大,盡量減少拆箱和裝箱的操作
1,盡量減少引用類型和值類型之間的運算。例如字符串和值類型之間的加法,會發生裝箱問題
2,盡量使用泛型集合和對象,避免發生裝箱和拆箱的動作

C#裝箱和拆箱