カテゴリ: C# 更新日: 2025/06/30

C#の構造体(struct)とクラス(class)の違いを理解しよう

C#の構造体(struct)とクラス(class)の違いを理解しよう
C#の構造体(struct)とクラス(class)の違いを理解しよう

先生と生徒の会話形式で理解しよう

生徒

「C#のstruct(ストラクト)とclass(クラス)って、どう違うんですか?」

先生

「とても大切なポイントですね。構造体(struct)とクラス(class)は、C#でデータをまとめる方法ですが、それぞれ使い方や特徴が違いますよ。」

生徒

「パッと見は似てるのに、何がどう違うんですか?」

先生

「それでは、構造体(struct)とクラス(class)の違いを、わかりやすく例えながら説明していきましょう!」

1. 構造体(struct)とは?

1. 構造体(struct)とは?
1. 構造体(struct)とは?

構造体(struct)は、値型(value type)のデータ型です。これは、簡単に言うと「箱の中に直接データを入れる」ようなイメージです。

たとえば、「座標(X座標とY座標)」を扱いたいときに構造体が便利です。以下のように書きます。


struct Point
{
    public int X;
    public int Y;
}

この構造体を使ってデータを作ると、次のようになります。


Point p1 = new Point();
p1.X = 10;
p1.Y = 20;

構造体は値型なので、別の変数に代入すると「コピー」されます。


Point p2 = p1;
p2.X = 99;
Console.WriteLine(p1.X); // 結果は10

10

このように、p1とp2は別々の値を持っています。

2. クラス(class)とは?

2. クラス(class)とは?
2. クラス(class)とは?

クラス(class)は、参照型(reference type)です。これは「箱の中に住所だけが入っていて、データ自体は他の場所にある」というイメージです。

たとえば、同じように座標の情報をクラスで表現すると、次のようになります。


class PointClass
{
    public int X;
    public int Y;
}

そして、使うときは次のようになります。


PointClass pc1 = new PointClass();
pc1.X = 10;
pc1.Y = 20;

PointClass pc2 = pc1;
pc2.X = 99;
Console.WriteLine(pc1.X); // 結果は99

99

このように、クラスは参照型なので、変数を代入すると同じ場所を指すことになります。つまり、pc1とpc2は同じデータを見ています。

3. 値型と参照型の違いをもっとやさしく解説

3. 値型と参照型の違いをもっとやさしく解説
3. 値型と参照型の違いをもっとやさしく解説

ここで、お弁当の例えを使って説明しましょう。

  • 構造体(値型)は、自分専用のお弁当箱を持っているイメージ。
  • クラス(参照型)は、誰かの弁当箱の場所(住所)を教えてもらって、それを共有しているイメージ。

構造体なら、中身を書き換えても他の人には影響しません。でも、クラスなら、同じ弁当をみんなで使っているので、誰かが中身を変えると、みんなが影響を受けます。

4. 構造体(struct)とクラス(class)の主な違い

4. 構造体(struct)とクラス(class)の主な違い
4. 構造体(struct)とクラス(class)の主な違い
項目 構造体(struct) クラス(class)
型の種類 値型 参照型
データの格納 直接中に入る アドレス(場所)を通じて操作
メモリの使用 スタック領域 ヒープ領域
継承 できない できる
用途 軽量なデータ構造(座標・サイズなど) 複雑なオブジェクト(ユーザー情報・商品など)

5. いつ構造体を使い、いつクラスを使う?

5. いつ構造体を使い、いつクラスを使う?
5. いつ構造体を使い、いつクラスを使う?

構造体とクラスは、それぞれ向いている使い方があります。

  • 構造体は、サイズが小さく、処理が軽いデータに使うと効率的です。
  • クラスは、複雑な動作やたくさんのデータを扱うときに向いています。

たとえば、ゲームで「敵キャラの位置」をたくさん扱うときはstruct。ユーザーの情報(名前、パスワード、設定など)を扱うときはclassが向いています。

6. 初心者が混乱しやすいポイントを整理しよう

6. 初心者が混乱しやすいポイントを整理しよう
6. 初心者が混乱しやすいポイントを整理しよう

初心者が間違いやすいのは、「見た目が似ているから同じように使える」と思ってしまうことです。

でも、代入やメモリの使われ方がまったく違うため、正しい理解が必要です。

実際のコードで動作を比べてみることで、体感的に違いがわかってきます。

カテゴリの一覧へ
新着記事
COBOLの変数名の付け方を解説!初心者でもわかる命名規則とコツ
C#のbreakとcontinueの使い方!ループ制御の基本テクニック
COBOLのFILLERの使い方とは?未使用領域を上手に管理する基本テクニック
C#のforeach文の基本!配列やコレクションを簡単に繰り返し処理する方法
人気記事
No.1
Java&Spring記事人気No1
C#のwhile文の使い方!条件付きループを基礎から学ぼう
No.2
Java&Spring記事人気No2
COBOLのDISPLAY文の使い方を完全ガイド!初心者でもわかる出力方法
No.3
Java&Spring記事人気No3
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.4
Java&Spring記事人気No4
COBOLのINDEXED BY句を使ったインデックス管理の基本をやさしく解説!