2014-12-20 142 views
-1

我在C#中搜索裝箱和拆箱時發現了以下代碼片段。拳擊拆箱

class TestBoxing 
{ 
    static void Main() 
    { 
     int i = 123; 

     // Boxing copies the value of i into object o. 
     object o = i; 

     // Change the value of i. 
     i = 456; 

     // The change in i does not effect the value stored in o. 
     System.Console.WriteLine("The value-type value = {0}", i); 
     System.Console.WriteLine("The object-type value = {0}", o); 
    } 
} 
/* Output: 
    The value-type value = 456 
    The object-type value = 123 
*/ 

在這裏說,儘管我的他價值變動0的值保持same.If這樣的話0被引用爲值「123」,而不是i.Is會這樣呢?存儲如果o當我的價值改變時,我的價值也會發生變化。如果我錯了,請糾正我。

+2

'// Boxing copies the value' –

+0

您需要區分值類型和引用類型。除非在傳入方法時使用ref或out關鍵字,否則值類型始終在分配時複製。引用類型不會獲取副本,而是指向。 –

回答

6

裝箱是將值類型轉換爲類型對象或將 轉換爲由此值類型實現的任何接口類型的過程。當CLR 裝入一個值類型時,它會將值包裝在System.Object中,並將其存儲在託管堆中。拆箱從對象中提取 的值類型。拳擊是隱含的;拆箱是明確的。裝箱和拆箱的概念是類型系統的C#統一視圖 的基礎,其中可以將任何類型的值視爲對象。


int i = 123; 
// The following line boxes i. 
object o = i; 

enter image description here


o = 123; 
i = (int)o; // unboxing 

enter image description here

請閱讀full article on MSDN