ボクシングとは、値型のデータを参照型のオブジェクトとして扱うことを指します。
C# では、値型のデータ(int、double、char など)を参照型の object や interface 型に代入する際に、ボクシングが行われます。
using System;
class Program
{
static void Main()
{
int num = 123; // 値型の変数
object obj = num; // ボクシング: int を object に代入
// obj をアンボクシングして int に戻す
int unboxedNum = (int)obj;
Console.WriteLine("ボクシングされた値: " + obj);
Console.WriteLine("アンボクシングされた値: " + unboxedNum);
}
}
ボクシングとは
暗黙的なボクシング
暗黙的なボクシングとは、基本的にはコンパイラによって自動的に行われるボクシングのことです。
object 型などの参照型に代入される際に、C#コンパイラが自動的にボクシングを行います。
暗黙的なボクシングの例
int i = 123;
object obj = i; // 暗黙的なボクシング
コードの解説
- int i = 123;:
- 変数 i はスタックメモリに保存され、整数値 123 がその領域に直接格納されます。
- object obj = i;:
- 変数 obj もスタックメモリに保存されますが、i の値が obj に代入されるときに、ボクシングが発生します。ボクシングとは、値型の変数をオブジェクト型に変換する操作であり、その結果、値型のデータがヒープメモリにコピーされます。したがって、obj が参照するオブジェクトはヒープメモリに保存され、その中に 123 という値が格納されます。
明示的なボクシング
明示的なボクシングは、明示的に値型の変数を参照型に変換するプロセスです。
以下の例では、intValueという名前のint型の変数に値10を代入し、その後に(object)intValueのように明示的なキャストを行い、値型の変数をobject型の変数にボクシングしています。
int intValue = 10; // 値型の変数を宣言し、値を代入する
object boxedValue = (object)intValue; // 明示的なボクシング: 値型の変数を object 型にキャストして代入する
Console.WriteLine("Boxed value: " + boxedValue); // 出力: 10 (値がボクシングされた object 型の変数の値が表示される)
ボクシングの注意点
簡単に言うとメモリをたくさん使うことにもなるから使い過ぎに注意ということです。