【C#】ボクシングとアンボクシング

ボクシング(Boxing)は、C#において値型(例えば、intboolなど)をobject型やインターフェイス型などの参照型に変換するプロセスのことを指します。

ボクシングの仕組み

値型はスタックに格納される軽量なデータ型で、メモリ管理が効率的です。一方、object型などの参照型はヒープに格納され、より柔軟ですがメモリ管理が複雑になります。

ボクシングが行われると、以下のような処理が行われます:

  1. 値型のデータがヒープにコピーされ、新しいオブジェクトが生成されます。
  2. そのオブジェクトへの参照が作成され、これがobject型の変数に格納されます。

ボクシングの例

int num = 123;          // 値型(int)
object obj = num;       // ボクシング:numがobject型に変換される

アンボクシング(Unboxing)

逆に、ボクシングされたobject型のオブジェクトを再び値型に戻すプロセスをアンボクシング(Unboxing)といいます。

アンボクシングの例

int num = 123;          // 値型(int)
object obj = num;       // ボクシング
int num2 = (int)obj;    // アンボクシング

アンボクシングを行う際は、元の値型に明示的にキャストする必要があります。間違った型にキャストするとランタイムエラーが発生します。

ボクシングの注意点

ボクシングとアンボクシングはパフォーマンスに影響を与えることがあります。特にループ内で頻繁に行われると、オーバーヘッドが増加し、アプリケーションのパフォーマンスが低下する可能性があります。そのため、可能であればボクシングを避け、ジェネリック型(List<T>など)を使用するのが推奨されます。

ボクシングの理解は、C#の型システムやパフォーマンスの最適化において非常に重要です。

C#

Posted by hidepon