程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 引用類型、數值類型及裝箱

引用類型、數值類型及裝箱

編輯:.NET實例教程
一、類型分類:
1:值類型,
(1)表示變量引用的位置就是值在內存中實際存儲的位置;表一個變量的值賦給另一個變量,會在新變量所在的位置創建原始變量的值的一個內存副本,它不能引用與第一個變量相同的內存位置,
所以更改其中一個不會影響到另一個變量的值;
(2)將一個值類型傳給一個方法,也會生成一個內存的副本,在方法的內部對參數進行修改,並不會影響到原始調用者的原始值。
值類開存儲在稱為”棧“的內存空間裡面。

2:引用類型
    (1)引用類型指向的是數據存儲的位置,也就是存放的是一個內存地址,從這個內存地址才能找到真正的數據,因此,在訪問數據時,先從引用變量中取得所要的內存位置,再跳轉到內存位置取得
取得真正的數據;引用類型指向的內存區域叫做”堆“,也就是存儲真正數據的位置;
    (2)一個引用類型變量賦值給另一個引用類型變量時,只會多出一個地址的內存副本,而二者指向的同一個在”堆“中真正的數據並不會變化;所以兩個變量可以引用相同數據,故其中一個變量改變
也會使另一個變量引用的數據改變。
    說明:除了string object,所有C#的基本數據類型都是值類型。
    
二 裝箱(boxing)
1,當一個值類型轉換為實現的某個接口或者對象時,這個轉型的過程稱為”裝箱“。分為以下三個步驟:
    (1) 首先在”堆“分配好所要的內存,它將用來存放值類型的數據以及少許的額外開銷(方法表指針等);
    (2) 接著發生一次內存復制,把”棧“上值類型的數據復制到”堆“上分配好的位置上;
    (3) 最後,對象或接口引用得到更新,指向堆上的位置。
2,相反的轉化過程叫做”拆箱“(unboxing),
3,說明:box對性能有很大的影響,因為要程序要注意有很多不容易被發現的大量的裝箱和拆箱的操作。



本文來自CSDN博客,轉載請標明出處:http://blog.csdn.Net/zhuoruling/archive/2009/12/17/5028337.ASPx
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved