C#核心概念–裝箱和拆箱(什麼是裝箱和拆箱)

來源:互聯網
上載者:User
裝箱(boxing)和拆箱(unboxing)是C#類型系統的核心概念.是不同於C與C++的新概念!,通過裝箱和拆箱操作,能夠在實值型別和參考型別中架起一做橋樑.換言之,可以輕鬆的實現實值型別與參考型別的互相轉換,裝箱和拆箱能夠統一考察系統,任何類型的值最終都可以按照對象進行處理.
   C#語言中的所有類型都是由基類System.Object繼承過來的,包括最常用的基礎類型:int, byte, short,bool等等,就是說所有的事物都是對象。如果申明這些類型得時候都在堆(HEAP)中分配記憶體,會造成極低的效率!(箇中原因以及關於堆和 棧得區別會在另一篇裡單獨得說說!)
.NET如何解決這個問題得了?正是通過將類型分成值型(value)和引用型(regerencetype),C#中定義的實值型別包括原類型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚舉(enum)、結構(struct),參考型別包括:類、數組、介面、委託、字串等。
值型就是在棧中分配記憶體,在申明的同時就初始化,以確保資料不為NULL;
引用型是在堆中分配記憶體,初始化為null,引用型是需要GARBAGE COLLECTION來回收記憶體的,值型不用,超出了作用範圍,系統就會自動釋放!
下面就來說裝箱和拆箱的定義!
裝箱就是隱式的將一個值型轉換為引用型對象。比如:
int i=0;
Syste.Object obj=i;
這個過程就是裝箱!就是將i裝箱!
拆箱就是將一個引用型對象轉換成任意值型!比如:
int i=0;
System.Object obj=i;
int j=(int)obj;
這個過程前2句是將i裝箱,後一句是將obj拆箱!
再寫個代碼,看看進行了幾次裝拆箱!
int i=0;
System.Object obj=i;
Console.WriteLine(i+","+(int)obj);
其中共發生了3次裝箱和一次拆箱!^_^,看出來了吧?!
第一次是將i裝箱,第2次是輸出的時候將i轉換成string類型,而string類型為參考型別,即又是裝箱,第三次裝箱就是(int)obj的轉換成string類型,裝箱!
拆箱就是(int)obj,將obj拆箱!!

在C#中,將類和數組等都歸為了引用型的,那麼實值型別和引用型有什麼區別呢?

 實值型別的變數包含自身的資料,而參考型別的變數是指向資料的記憶體塊的,並不是直接存放資料。對於實值型別,每個變數都有一份自己的資料複製,對另一個實值型別變數的操作並不影響這一個變數的值。

 而對於參考型別,兩個變數有可能引用同一對象,因此對一個變數的操作會影響到另一個變數。

 Eg: 實值型別

     (1) int a=0;     

     (2) int  b=a;

     (3) int  b=10;       

(2)之後,a,b均為0,但是(3)之後,b=10, a=0; 對b的重新附值並不影響a

    參考型別:

    using System;

   class valueclass

 {

   public int value=0;

}

class text{

public static void main()

{

valueclass a=new valueclass()

valueclass a=b;

b.value=10;

Console.WriteLine(“{0},{1}”,a.value,b.value);

}

}

輸出結果:10,10             

就相當於指標,兩個變數指向同一塊記憶體資料,當一個變數對記憶體區資料改變之後,另一個變數指向的資料當然也會改變。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.