2012-07-16 4 views

答えて

8

ボクシングは、本質的にオブジェクトの船体に値の種類をラップしています。たとえば、(int)3.14のように、実際に型変換は行われません。彼らは両方ともキャスト演算子を使用します。

+0

クイックアンサーに感謝します。他の返信を待っています! – LaysomeSmith

0

別の互換性のあるタイプの1つのタイプを変換することです後でアンボックスすることができる匿名オブジェクトに入力します。

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

質問は、我々は型キャスティングとしてボクシングとunboxingと呼ぶことができますか? – LaysomeSmith

+0

@LaysomeSmithはもう少し詳細を加えました – Mayank

0

キャスティング:(それは他に一種類のインスタンスの変換について基本的'S)

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

nullを許可されていない値型には、すべて同じメンバのヒープオブジェクト型が関連付けられています。値型格納場所をボクシングすると、新しいヒープ型インスタンスが作成され、値型格納場所からすべてのフィールドが新しいインスタンスの対応するフィールドにコピーされます。値タイプをアンボックスすると、すべてのフィールドが、対応するヒープオブジェクト型のインスタンスから値型格納場所の対応するフィールドにコピーされます。

2

C#タイプシステムには、値タイプ、参照タイプ、およびポインタタイプの3つのタイプがあります。 C#では、値型を参照型に変換し、再び値型に戻すことができます。値型を参照型に変換する操作は、ボクシングと呼ばれ、逆の操作は、アンボックスと呼ばれます。

ボクシング

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

我々は値タイプヴァルを作成し、ヴァルに値を割り当てられている最初の行。 2行目は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

最初の2本のラインは、値型をボックスに示します。次の行(int i =(int)Obj)は、ObjectからValue Typeを抽出します。これは、参照型の値を値型の値に変換しています。この操作はUnBoxingと呼ばれます。

ボクシングとアンボーミングは、計算コストの高いプロセスです。値の種類がボックス化されている場合は、まったく新しいオブジェクトを割り当てる必要があります。また、UnBoxingに必要なキャストも計算的には高価です。

関連する問題