C# のクラス(Class)って実際なに?

C# の class は、オブジェクト指向プログラミングの中心となる 参照型(Reference Type) のデータ構造です。
データ(フィールド)と処理(メソッド)をひとまとめにして扱えるため、複雑なアプリケーションを組み立てる基盤になります。

class の基本

class の役割

  • データ(フィールド)
  • 処理(メソッド)
  • 状態の変化
  • 継承・ポリモーフィズム

これらをまとめて扱えるのが class の最大の特徴です。

宣言例

csharp
public class Player
{
    public string Name;
    public int Hp;

    public Player(string name, int hp)
    {
        Name = name;
        Hp = hp;
    }

    public void Damage(int value)
    {
        Hp -= value;
    }
}

インスタンス化

csharp
Player p = new Player("Alice", 100);
p.Damage(20);
ℹ️ NOTE
class は「設計図」、インスタンスは「実体」と考えると理解しやすい。

class と struct の違い

参照型 vs 値型

  • class:参照型 → 変数は「実体への参照」を持つ
  • struct:値型 → 変数は「実体そのもの」を持つ
csharp
class A { public int x; }
struct B { public int x; }

A a1 = new A { x = 10 };
A a2 = a1;   // 参照がコピーされる
a2.x = 20;   // a1.x も 20 に変わる

B b1 = new B { x = 10 };
B b2 = b1;   // 値がコピーされる
b2.x = 20;   // b1.x は 10 のまま
⚡ IMPORTANT
class は「共有される」、struct は「コピーされる」。
この違いが設計に大きく影響する。

class が向いている場面

  • 状態が頻繁に変わる
  • 大きなデータを扱う
  • 参照共有したい
  • 継承を使いたい
  • 複雑なロジックを持つ

struct が向いている場面

  • 小さくて不変なデータ
  • 軽量で大量に扱う
  • コピーされても問題ない

class の特徴(深掘り)

1) 継承ができる

csharp
public class Enemy : Character
{
    public void Roar() { }
}

2) ポリモーフィズムが使える

csharp
Character c = new Enemy();
c.Attack();  // Enemy の Attack が呼ばれる

3) 参照共有による状態管理がしやすい

csharp
Player p1 = new Player("Bob", 100);
Player p2 = p1;

p2.Hp = 0;

// p1.Hp も 0 になる(同じ実体を参照している)
⚠️ WARNING
参照共有は便利だが、意図しない副作用の原因にもなる。

実用例(ゲーム・業務アプリ・Unity)

1) ゲーム開発:プレイヤーや敵など「状態を持つ存在」

csharp
public class Enemy
{
    public int Hp;
    public float Speed;

    public void Move()
    {
        // 移動処理
    }

    public void Damage(int value)
    {
        Hp -= value;
    }
}
💡 TIP
敵やプレイヤーのように「状態が変わるもの」は class が自然。

2) 業務アプリ:ユーザーや注文データなどの管理

csharp
public class Order
{
    public int Id { get; set; }
    public string Customer { get; set; }
    public decimal Amount { get; set; }

    public bool IsLargeOrder() => Amount > 10000m;
}
⚡ IMPORTANT
業務アプリでは「複雑なデータ + ロジック」をまとめるのに class が必須。

3) Unity:MonoBehaviour を継承するクラス

Unity のスクリプトはほぼすべて class。

csharp
public class PlayerController : MonoBehaviour
{
    public float speed;

    void Update()
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }
}
🔴 CAUTION
Unity のコンポーネントは struct では作れない。
MonoBehaviour は class のみ。

まとめ

  • class は 参照型で、複雑なデータと処理をまとめるための仕組み
  • 状態が変わるもの、共有されるもの、継承が必要なものに向く
  • struct とは「コピーされるか」「共有されるか」が大きな違い
  • ゲーム・業務アプリ・Unity などあらゆる場面で class は中心的役割