c#基本類型

數據類型分爲兩種:值類型和引用類型,這兩種類型的對象在內存的存儲方式不同。

定義:  

      引用類型:表示操作的對象是同一個,即當傳一個參數給另一個方法時,在另一個方法中改變這個變量的值,那麼調用這個方法時傳入的值也將發生變化。

      值類型:表示複製一個當前變量傳遞給方法,在方法中改變這個值時,最初生命的變量值不會改變。

值類型

      值類型及基本數據類型,常被分爲四類八種:

            四類:整型,浮點型,字符型,邏輯型

            八種:1,整型3種 byte, short, int, long

                     2,浮點型 float, double

                     3,字符型 char

                     4,邏輯型 boolean

引用類型

       除了四類八種的基本類型,其他數據類型都是引用類型,例如:string類型,object類型等。

傳遞:

       值傳遞:基本數據類型複製都屬於值傳遞。傳遞的是實實在在的變量值,是原參數的拷貝,實參傳遞給形參的值,形參發生變化而不影響實參。

       引用傳遞:引用類型之間的賦值屬於引用傳遞。傳遞的對象是引用的地址,即將實參的地址傳遞給形參,形參改變了實參也相應發生變化,因爲指向同一個地址。

存儲:

   1.    值類型:只需一段單獨的內存,用於存儲時間的數據。

          引用類型:需要兩端內存:

                第一段:實際數據,總是位於堆中

                第二段:一個引用,指向數據在堆中的存儲位置

          數據如果不是其他類型的成員就會像下圖一樣存貯,對於值類型數據放在棧中。對於引用類型數據放在堆中而引用放在棧中

    2.存儲引用類型對象的成員

          引用類型對象的數據始終存儲在堆中,如下圖。

          值類型數據,或引用類型數據的引用可以放在堆裏,也可以放在棧裏。

例如:引用類型的對象名稱爲MyType,有兩個成員:一個值類型成員和一個引用類型成員,將如何存儲呢?

        對於一個引用類型,其實例的數據始終放在堆裏。既然兩個成員都是對象數據的一部分,那麼他們都會被放在堆裏,無論是值類型還是引用類型 如圖:

    

裝箱和拆箱

     裝箱就是值類型轉化爲引用類型的過程。將一個值類型變量裝箱成一個引用類型變量,首先會在託管堆上爲新的引用類型變量分配內存空間,然後將值類型變量拷貝到託管堆上新分配的對象內存中,然後返回新分配的對象內存地址。  

例如:
int val = 100;
object obj = val;
Console.WriteLine (“對象的值 = {0}",obj);
 
     拆箱操作即是裝箱的逆操作,拆箱的過程,是將值類型轉換爲引用類型,再由引用類型轉換爲值類型的過程。
例如:
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}",num);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章