C 裝箱和拆箱

2022-02-20 09:03:12 字數 924 閱讀 9913

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 裝箱和拆箱

c 裝箱和拆箱 概念 裝箱 將值型別轉換為引用型別的過程叫做裝箱 值型別 引用型別 相反,拆箱 將引用型別轉換為值型別 叫做拆箱 引用型別 值型別 裝箱例子 int i 2008 object obj i console.writeline 1 i的值為,裝箱之後的值 i,obj i 927 con...

C 裝箱和拆箱

1 什麼是裝箱和拆箱 裝箱是將值型別轉換為引用型別 拆箱是將引用型別轉換為值型別 2 什麼時候需要裝箱?值型別是高效輕量的型別,因為預設情況下在堆上不包括他們的物件元件,然而,如果我們需要物件元件,這個時候就需要裝箱了。最常見的場景就是 乙個方法你希望能共用,設定的引數型別是object型別 引用型...

C 裝箱和拆箱

值型別例項進行裝箱時的步驟 1 在託管堆中分配記憶體。需要注意的是,由於是將值型別進行引用型別化,因而分配的記憶體空間除了值型別各個欄位所需的記憶體之外,還要加上託管堆所有物件都有的兩個額外成員 型別物件指標和同步塊索引 所需的記憶體。2 將值型別的字段複製到新分配的堆記憶體中。3 返回物件位址,即...