C#におけるボックス化解除(Unboxing)とは?
C#におけるボックス化解除(Unboxing)とは?
C#では、値型をobject型に変換する操作を「ボックス化(Boxing)」と呼び、逆に、ボックス化によって作成された参照型を元の値型へ戻す操作を「ボックス化解除(Unboxing)」と呼びます。
重要なポイントは、ボックス化は暗黙的に行われる一方、ボックス化解除は明示的に行う必要があるという点です。つまり、ボックス化されたオブジェクトを値型に戻す際には、必ず明示的なキャストを記述しなければなりません。
変数とオブジェクトの基本的な例
以下は、C#における変数とオブジェクトの関係を示したシンプルな例です。
// int型の変数 int x = 30; // ボックス化(暗黙的) object obj = x; // ボックス化解除(明示的) int unboxInt = (int)obj;
int型の値xは、object型の変数objに代入される時点で自動的にボックス化されます。その後、(int)という明示的なキャストによって、元の値型へとボックス化解除されています。
ArrayListを使ったボックス化解除の例
次の例では、ArrayListに値型を追加・取得する際のボックス化とボックス化解除の動作を確認できます。
int x = 5; ArrayList arrList = new ArrayList(); // ボックス化:int型がobject型として格納される arrList.Add(x); // ボックス化解除:object型からint型へ明示的にキャスト int y = (int)arrList[0];
ArrayList.Addメソッドはobject型を受け取るため、int型の値xを追加するときにボックス化が発生します。そして、要素を取り出すときには(object)として格納されているため、元のint型へ明示的にキャスト(ボックス化解除)する必要があります。
注意点
ボックス化解除を行う際は、ボックス化されたときと同じ型へキャストしなければなりません。異なる型へキャストしようとすると、実行時にInvalidCastExceptionがスローされるため注意が必要です。また、ボックス化・ボックス化解除はヒープへの割り当てを伴うため、頻繁に行うとパフォーマンスに影響を与える可能性があります。可能な限りジェネリックコレクション(List<T>など)を活用し、不要なボックス化を避けることが推奨されます。
-
C#の列挙型(Enum)とは?基本的な使い方をサンプルコード付きで解説
C#における列挙型(Enum:Enumeration)は、曜日、月、季節、製品カテゴリなど、関連する一連の名前付き定数をひとつのグループとして格納するためのデータ型です。Enumの定数にはデフォルトで0から始まる整数値が自動的に割り当てられ、宣言された順番に1ずつ増加していきます。定数のセットは固定されており、ループ処理などで簡単に走査(トラバース)できるのも大きな特徴です。Enumの基本的な特徴関連する名前付き定数をひとまとめに管理できる最初の定数にはデフォルトで「0」が割り当てられ、以降は1ずつ増加する値は明示的に変更することも可能型安全性が高く、無効な値の代入をコンパイル時に防げるEnu
-
C#のボクシング(Boxing)とアンボクシング(Unboxing)をわかりやすく解説
C#には「値型」と「参照型」という2つの大きな型の分類が存在します。これらの間でデータをやり取りする際に登場するのが、ボクシング(Boxing)とアンボクシング(Unboxing)という変換処理です。本記事では、それぞれの仕組みと具体的なコード例を交えて解説します。 ボクシング(Boxing)とは ボクシングとは、値型(int、double、structなど)を暗黙的に参照型(objectなど)へ変換する処理です。値型の変数をobject型の変数に代入すると、その値はヒープ上に新しいオブジェクトとして確保され、そこにコピーされます。 この変換は明示的なキャストを必要としないため、「暗黙的」な変