ボックス化変換 (C# プログラミング ガイド)
ボックス化は、値型をガベージ コレクション ヒープに格納するために使用します。ボックス化とは、値型から object 型、またはその値型によって実装されている任意のインターフェイス型への暗黙の変換のことです。値型をボックス化すると、オブジェクト インスタンスがヒープに割り当てられ、値が新しいオブジェクトにコピーされます。
値型の変数の宣言例を次に示します。
int i = 123;
次のステートメントは、変数 i にボックス化を暗黙的に適用します。
object o = i; // implicit boxing
このステートメントによって、ヒープ上にある int 型の値を参照するオブジェクト参照 o がスタック上に作成されます。この値は、変数 i に割り当てられた値型の値のコピーです。2 つの変数 i と o の違いを次の図に示します。
ボックス化
次の例に示すように、明示的にボックス化を実行することもできますが、明示的なボックス化は不要です。
int i = 123;
object o = (object)i; // explicit boxing
説明
ここでは、ボックス化を使用して整数の変数 i をオブジェクト o に変換する例を示します。変換後に、変数 i の値を 123 から 456 に変更します。この例は、元の値型とボックス化されたオブジェクトが別個のメモリ位置を使用するため、それぞれ別々の値を格納できることを示しています。
使用例
class TestBoxing
{
static void Main()
{
int i = 123;
object o = i; // implicit boxing
i = 456; // change the contents of i
System.Console.WriteLine("The value-type value = {0}", i);
System.Console.WriteLine("The object-type value = {0}", o);
}
}
出力
The value-type value = 456
The object-type value = 123
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
- 4.3.1 ボックス化変換