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