C#プログラミングにおけるボクシングとアンボクシングの違いを徹底解説
C#には、値型(value type)と参照型(reference type)を相互に変換するための仕組みとして、「ボクシング(Boxing)」と「アンボクシング(Unboxing)」の2つが用意されています。ボクシングは値型からオブジェクト型への変換を行う処理であり、アンボクシングはその逆で、オブジェクト型から値型へ変換する処理を指します。
本記事では、ボクシングとアンボクシングの重要な違いを比較表とサンプルコードを使ってわかりやすく解説します。
ボクシングとアンボクシングの主な違い
| 番号 | 項目 | ボクシング | アンボクシング |
|---|---|---|---|
| 1 | 処理内容 | 値型をオブジェクト型として扱えるようにする変換処理です。 | ボックス化されたオブジェクトから、元の値を取り出す変換処理です。 |
| 2 | データの格納場所 | スタック上に格納された値が、ヒープメモリ上のオブジェクトへコピーされます。 | ヒープメモリ上のオブジェクトが持つ値が、スタック上の値型へコピーされます。 |
| 3 | 変換の種類 | 暗黙的な変換(implicit conversion)として行われます。 | 明示的な変換(explicit conversion)としてキャストが必要です。 |
パフォーマンスに関する注意点
ボクシングではヒープメモリへの割り当てが発生するため、大量のデータを扱うループ処理などで頻繁にボクシング・アンボクシングを繰り返すと、パフォーマンス低下やガベージコレクションの負荷増大につながります。可能な限りジェネリック(List<T> など)を活用し、不要なボクシングを避けることが推奨されます。
ボクシングとアンボクシングのサンプルコード
BoxingUnboxingDemo.cs
using System;
public class BoxingUnboxingDemo {
public static void Main(string[] args) {
int val = 119;
// ボクシング:値型をオブジェクト型へ変換
object o = val;
// val の値を変更
val = 120;
// アンボクシング:オブジェクト型を値型へ明示的に変換
int x = (int)o;
Console.WriteLine("x の値: " + x);
Console.WriteLine("val の値: " + val);
Console.WriteLine("o の値: " + o);
}
}実行結果
x の値: 119 val の値: 120 o の値: 119
コードの解説
この例では、まず int 型の変数 val に 119 を代入しています。object o = val; の行でボクシングが行われ、val の値がヒープ上のオブジェクトにコピーされます。その後 val を 120 に変更しても、すでにボックス化されたオブジェクト o の中身は 119 のままです。これは、ボクシング時に値がコピーされることを示しています。最後に (int)o という明示的なキャストでアンボクシングを行い、オブジェクトから元の値 119 を取り出しています。
-
MEAN.jsとMEAN.ioの違いは?本質的な共通点と選び方をわかりやすく解説
MEANスタックとは?「MEAN」とは、Webアプリケーション開発で使われる次の4つの技術の頭文字を取った略称です。MongoDB:ドキュメント指向のNoSQLデータベースExpress:Node.js向けの軽量WebアプリケーションフレームワークAngular:Googleが中心となって開発するフロントエンドフレームワークNode.js:サーバーサイドでJavaScriptを実行できるランタイム環境これらを組み合わせることで、フロントエンドからバックエンド、データベースまでをすべてJavaScriptで統一して開発できるのが、MEANスタック最大の魅力です。MEAN.jsとMEAN.ioは本
-
CellpaddingとCellspacingの違いとは?HTMLテーブルの余白設定をわかりやすく解説
HTMLで表(テーブル)を作成する際、セル内やセル同士の余白を調整したい場面は多くあります。そのときに登場するのが「cellpadding」と「cellspacing」という2つの属性です。名前は似ていますが、役割はまったく異なります。本記事では、それぞれの特徴と具体的な使い方、そして両者の違いについて詳しく解説します。Cellpadding(セルパディング)とは単一のセルに対して作用する属性です。セルの枠線(ボーダー)とセル内のコンテンツ(文字や画像など)との間の余白を調整します。デフォルト値は1(ピクセル)です。コンテンツが枠に密着して見づらくなるのを防げるため、視認性向上に効果的な手法と