close

1.Object資料類型

 

object是所有其它類型的基類,C#中的所有類型都直接或間接地從object 類中繼承。
所以對一個object的變數可以赋予任何類型的值:

int x =25;

object obj1;

obj1 = x;

object obj2 =‘A’;

Object 資料型別是參考型別

無論它所參考的資料型別為何,Object 變數都不會包含資料值本身,而是值的指標

它在電腦記憶體中所佔的空間為 4 個位元組,但這並不包括儲存表示變數值的資料。

因為用指標來找出資料的程式碼之故,

存放實值型別的 Object 變數會比有明確型別的變數在存取方面要來得稍慢些。

NET Framework 中的對應型別為 System.Object 類別。

你可以使用 GetTypeCode 方法取得目前 Object 變數所參考的資料型別。

 

2.Boxing和UnBoxing

1.Boxing(將數值型別轉換成參考型別)

 

int i = 123;
object obj = i;

 

變數 i 是實值型別,資料存在 stack 裡
變數 obj 是參考型別,資料存在 heap 裡
當執行 obj = i 時,系統會將 123從 stack 複製一份到 heap 之中,
然後 obj 就指向這個位址,這就稱為 Boxing。

 

IC97798  

 

注意:也可以執行明確的Boxing處理,但非必要,如下所示

 

int i = 123;
object o = (object)i; 

  

2.UnBoxing(將參考型別轉換成數值型別)

 把Heap中的值複製到Stack中

 以此程式碼為例就是把o物件的值複製到j 變數的Stack中

 

int i = 123; // value type
object o = i; // boxing
int j = (int)o; // unboxing

 

IC97798  

 

結論:

 

相對於單純的指派,boxing 和 unboxing 是會耗費大量運算資源的處理序。
當實值類型經過 Box 處理時,必須配置及建構新的物件。
Unboxing 所需的轉換雖然較為簡單,但也同樣需要大量運算資源。

在不會造成資料變動或資料變動不會影響程式運行的情況下,將數值型別裝箱成參考型別會較省記憶體及加快程式效能

 

 

 

 

 

參考來源:

http://msdn.microsoft.com/zh-tw/library/twcxd6b8.aspx

http://msdn.microsoft.com/zh-tw/library/9kkx3h3c.aspx

http://msdn.microsoft.com/zh-tw/library/yz2be5wk.aspx

http://notepad.yehyeh.net/Content/CSharp/CH01/05DataType/5BoxingAndUnboxing/index.php

http://vito-dotnet.blogspot.tw/2011/12/blog-post_16.html

http://www.dotblogs.com.tw/joysdw12/archive/2013/08/06/asp-net-boxing-unboxing.aspx

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小豆干 的頭像
    小豆干

    小豆干就是我唷

    小豆干 發表在 痞客邦 留言(0) 人氣()