一、型別分類:
1:值型別,
(1)表示變數引用的位置就是值在記憶體中實際儲存的位置;表乙個變數的值賦給另乙個變數,會在新變數所在的位置建立原始變數的值的乙個記憶體副本,它不能引用與第乙個變數相同的記憶體位置,
所以更改其中乙個不會影響到另乙個變數的值;
(2)將乙個值型別傳給乙個方法,也會生成乙個記憶體的副本,在方法的內部對引數進行修改,並不會影響到原始呼叫者的原始值。
值類開儲存在稱為」棧「的記憶體空間裡面。
2:引用型別
(1)引用型別指向的是資料儲存的位置,也就是存放的是乙個記憶體位址,從這個記憶體位址才能找到真正的資料,因此,在訪問資料時,先從引用變數中取得所要的記憶體位置,再跳轉到記憶體位置取得
取得真正的資料;引用型別指向的記憶體區域叫做」堆「,也就是儲存真正資料的位置;
(2)乙個引用型別變數賦值給另乙個引用型別變數時,只會多出乙個位址的記憶體副本,而二者指向的同乙個在」堆「中真正的資料並不會變化;所以兩個變數可以引用相同資料,故其中乙個變數改變
也會使另乙個變數引用的資料改變。
說明:除了string object,所有c#的基本資料型別都是值型別。
二 裝箱(boxing)
1,當乙個值型別轉換為實現的某個介面或者物件時,這個轉型的過程稱為」裝箱「。分為以下三個步驟:
(1) 首先在」堆「分配好所要的記憶體,它將用來存放值型別的資料以及少許的額外開銷(方法表指標等);
(2) 接著發生一次記憶體複製,把」棧「上值型別的資料複製到」堆「上分配好的位置上;
(3) 最後,物件或介面引用得到更新,指向堆上的位置。
2,相反的轉化過程叫做」拆箱「(unboxing),
3,說明:box對效能有很大的影響,因為要程式要注意有很多不容易被發現的大量的裝箱和拆箱的操作。
2009-12-17
值型別 引用型別,裝箱 拆箱
值型別 宣告乙個值型別變數,會在棧上分配乙個空間,空間裡儲存的就是變數的值 引用型別 宣告乙個引用型別變數,會在棧中分配乙個空間,儲存乙個引用,這個引用指向了乙個託管堆。值型別 struct,列舉,數值型別,bool型別 引用型別 陣列,類,介面,委託 delegate object,string ...
堆 棧 值型別 引用型別 裝箱 拆箱
一來是為了感受國外優秀技術社群知名博主的高質量文章,二來是為了複習對.net技術的基礎拾遺達到溫故知新的效果,最後也是為了鍛鍊一下自己的英文讀寫能力。因為是首次翻譯英文文章 哎,原諒我這個菜比,弱爆了!所以肯定會有很多問題 有些語句理解不透徹,翻譯出來也不通順,還請不吝賜教 也請各位園友多多指正,謝...
值型別和引用型別,裝箱和拆箱
c 中任何型別都是隱式繼承自 system.object 引用型別 分為兩大類,值型別和引用型別。值型別包括 簡單型別 int,float,double等 結構體,列舉 引用型別包括 自定義的類,字串,介面,陣列 區別 1.值型別儲存在棧中,自動釋放,比較高效 引用型別儲存在堆中,需要手動釋放 2....