2012-07-16 57 views
9

當我們在原始數據類型之間轉換數據類型時,它被稱爲數據類型轉換。拳擊和拆箱也在鑄造?

但是,當在ValueType和ReferenceType之間進行轉換時,我們稱之爲裝箱和取消裝箱。

拳擊和拆箱也可以稱爲鑄造?

回答

8

拳擊只是在對象殼體中包裝一個值類型,本質上。它實際上並不涉及類型轉換,如(int)3.14。即使他們都使用演員操作。

+0

感謝您的快速回答。等待任何其他答覆! – LaysomeSmith 2012-07-16 21:27:24

0

拳擊基本上拳擊的值鍵入一個匿名對象,以後可以拆箱。

int x = 567; 
object y = x; //boxing 

int z = (int) y; //z will be 123 

int x = 567; 
object y = (object)x; //explicit boxing (not necessary) 

int z = (int) y; //z will be 123 

拳擊/拆箱不應該與類型轉型混淆,因爲拳擊我們只是圍繞變量包裝。通過執行類型轉換,您實際上正在更改變量或對象的類型。

Double x = 3.14444; 
Integer y = (Integer)x; //(type cast or static cast in c++) changing the type and loosing the original value too in this case. 


int x = 567; 
object y = (object)x; //explicit boxing (not necessary) 

float z = (float) y; //another example of type casting while unboxing 
+0

問題是我們可以稱爲拳擊和拆箱作爲類型鑄造? – LaysomeSmith 2012-07-16 21:45:38

+0

@LaysomeSmith增加了一點細節 – Mayank 2012-07-16 21:53:20

0

鑄造:(它基本上是關於將一​​種類型的實例爲另一種)

int a = (int) 3.14 // from the example above does casting with loosing precision. 
double b = a; // casting again (we may write (double) a - gives the same result). 

拳擊:(複製值類型的給堆過程)

object c = new MyStruct(); // MyStruct = struct. 
object d = 1; 
object e = (int) 3.14; // here we have actually casting and then boxing. 

開箱(複印盒裝值類型):

Button f = (MyStruct) c; 
int g = (int) d; // it still unboxing however it looks exactly like the line #1 above. 

希望它有幫助。

0

每個不可爲空的值類型都有一個關聯的堆對象類型和相同的成員。裝箱值存儲位置將創建一個新的堆類型實例,並將所有字段從值類型存儲位置複製到新實例的相應字段。取消裝箱值類型會將其相應堆對象類型實例的所有字段複製到值類型存儲位置的相應字段。

2

C#類型系統包含三種類型,它們是值類型,引用類型和指針類型。 C#允許我們將值類型轉換爲引用類型,並再次轉換爲值類型。將值類型轉換爲引用類型的操作稱爲裝箱,將相反的操作稱爲拆箱。

拳擊

  1. int Val = 1;
  2. Object Obj = Val; //Boxing

我們創建了一個值類型瓦爾和分配一個值瓦爾第一行。第二行,我們創建了一個Object Obj的實例,並將Val的值賦給Obj。從上面的操作(Object Obj = i)我們看到了將值類型的值轉換爲相應引用類型的值。這些類型的操作稱爲拳擊。

拆箱

  1. int Val = 1;
  2. Object Obj = Val; //Boxing
  3. int i = (int)Obj; //Unboxing

前兩行展示瞭如何框中輸入一個值類型。下一行(int i =(int)Obj)顯示從對象中提取值類型。這是將參考類型的值轉換爲值類型的值。這個操作被稱爲UnBoxing。

拳擊和UnBoxing是計算成本很高的過程。當一個值類型被裝箱時,一個全新的對象必須被分配和構造,並且UnBoxing所需的投射也是計算上昂貴的