C#のボクシング(ボックス化)とは?仕組みとサンプルコードでわかりやすく解説
C#のボクシング(ボックス化)とは
ボクシング(ボックス化)とは、値型(int や double など)を object 型(オブジェクト型)に変換する操作のことです。C#では、値型の変数を object 型の変数に代入するだけで、自動的にボクシングが行われます。
以下はボクシングの基本的な例です。
int x = 50; object ob = x; // ここでボクシングが発生
ボクシングの仕組み:スタックとヒープ
ボクシングが行われると、スタックに格納されていた値がコピーされ、ヒープメモリ上のオブジェクトとして格納されます。そのため、元の値型変数と object 型変数は、それぞれ独立した値を持つことになります。
ボクシングは、値型をガベージコレクション(GC)の管理対象であるヒープ領域に格納したい場合に役立ちます。また、この変換は暗黙的(implicit)に行われるため、特別なキャスト構文は不要です。
ボクシングのサンプルコード
実際のコードで動作を確認してみましょう。
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo {
static void Main() {
int x = 50;
object ob = x;
x = 100;
// x の変更は ob の値に影響しない
System.Console.WriteLine("Value Type = {0}", x);
System.Console.WriteLine("Object Type = {0}", ob);
}
}
出力結果:
Value Type = 100 Object Type = 50
この例では、ボクシング後に x を 100 に変更しても、ob の値は 50 のままです。これは、ボクシングの時点で値がヒープ上にコピーされているためです。
アンボクシング(Unboxing)との違い
一方、アンボクシングはボクシングの逆の操作であり、ヒープメモリ上のオブジェクトに格納された値を、スタック上の値型へコピーして戻す処理です。
両者の主な違いは以下のとおりです。
- ボクシング: 値型 → object 型への変換。暗黙的に行われる。
- アンボクシング: object 型 → 値型への変換。明示的なキャストが必要。
object ob = 50; // ボクシング(暗黙的) int y = (int)ob; // アンボクシング(明示的なキャストが必要)
なお、アンボクシング時に指定した型が、実際のオブジェクトの型と一致しない場合は InvalidCastException がスローされるため注意しましょう。
-
C/C++の型キャストとは?基礎から整数昇格・通常の算術型変換まで解説
型キャスト(型変換)とは、あるデータ型の変数を別のデータ型へ変換する手法のことです。例えば、long型の値を単純なint型の変数に格納したい場合、longをintへキャストすることができます。値をある型から別の型へ明示的に変換するには、キャスト演算子を次の形式で使用します。(型名) 式キャスト演算子の使用例次の例では、キャスト演算子によって整数変数同士の除算が浮動小数点演算として実行されます。#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) su
-
C#のデータ型とは?値型・参照型・ポインタ型の違いを徹底解説
C#のデータ型は、大きく分けて「値型(Value Type)」「参照型(Reference Type)」「ポインタ型(Pointer Type)」の3種類に分類されます。それぞれの仕組みと使い分けを理解することは、C#プログラミングの基礎として非常に重要です。本記事では、各データ型の特徴を一覧表付きでわかりやすく解説します。 値型(Value Types) 値型の変数には、データそのものが直接代入されます。すべての値型は System.ValueType クラスから派生しており、変数を別の変数に代入すると値がコピーされるため、元の変数には影響しません。 C#で利用できる主な値型は以下のとおりで