簡體   English   中英

拳擊和拆箱也在施展?

[英]Boxing and unboxing is also casting?

當我們在原始數據類型之間轉換數據類型時,它被稱為數據類型轉換。

但是當在ValueType和ReferenceType之間進行轉換時,我們將其稱為裝箱和拆箱。

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

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

C#Type System包含三種類型,它們是值類型,引用類型和指針類型。 C#允許我們將值類型轉換為引用類型,然后再轉換回值類型。 將值類型轉換為引用類型的操作稱為Boxing,反向操作稱為Unboxing。

拳擊

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

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

拆箱

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

前兩行顯示如何設置值類型。 下一行(int i =(int)Obj)顯示從Object中提取值類型。 即將參考類型的值轉換為值類型的值。 此操作稱為UnBoxing。

拳擊和解鎖是計算上昂貴的過程。 當一個值類型被裝箱時,必須分配和構造一個全新的對象,同時UnBoxing所需的強制轉換也是昂貴的計算

Boxing是將值類型轉換為類型對象並取消裝箱以重新獲取值的過程http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

鑄造就是將一種類型轉換為另一種類型

拳擊基本上是將值類型裝入匿名對象,以后可以取消裝箱。

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

轉換:(它主要是將一種類型的實例轉換為另一種類型)

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.

希望能幫助到你。

每個不可為空的值類型都有一個關聯的堆對象類型,它們具有相同的成員。 裝箱值類型存儲位置會創建新的堆類型實例,並將所有字段從值類型存儲位置復制到新實例的相應字段。 取消裝箱值類型會將所有相應堆對象類型的實例中的字段復制到值類型存儲位置的相應字段中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM