はじめに
C#で変数の値にアクセス・制御する方法として使われるのが getter
/ setter
、つまりプロパティです。
特に public
で外部に公開する値は、そのまま変数として公開するのではなく、適切に管理・保護するプロパティを使います。
🔰 基本の書き方
Player.cs
private int _health;
public int Health
{
get { return _health; }
set { _health = value; }
}
-
get
→ 値を取り出す -
set
→ 値を設定する
使用例:
Game.cs
player.Health = 100;
int hp = player.Health;
✅ 自動実装プロパティ(シンプル)
値の検証や制御が不要な場合は、以下のように短く書けます:
public int Score { get; set; }
裏で自動的にフィールドが生成されるため、単純なデータ保持には非常に便利です。
🔒 読み取り専用プロパティ(getterのみ)
private int _maxHealth = 100;
public int MaxHealth
{
get { return _maxHealth; }
}
または:
public int MaxHealth { get; } = 100;
✍️ 書き込み専用プロパティ(setterのみ)
private int _damage;
public int Damage
{
set { _damage = value; }
}
読み取り不可のプロパティにすることもできますが、あまり多くは使われません。
🎯 バリデーション付きプロパティ
private int _level;
public int Level
{
get { return _level; }
set
{
if (value >= 0)
{
_level = value;
}
}
}
setter
で条件を付けることで、安全な値だけを受け付けることができます。
バリデーション以外でも値をセットする時に何かしら動作を付け加えたい時とかにも使えます。(フォーマット等)
🧪 private setter + public getter(外部から読み取りのみ可)
public int Id { get; private set; }
public Player(int id)
{
Id = id;
}
外部から値の変更はできず、初期化のみ許可したいときに便利なパターンです。
📦 static プロパティ
Unityなどで、ゲーム全体でスコアや設定値を共有したい場合、static
を使って以下のように定義します:
public static int GlobalScore { get; set; }
使い方:
GameManager.GlobalScore += 10;
全シーン・全スクリプトで同じ値を使いまわせます。
おわりに
C#のプロパティは、単なる値の取得・設定にとどまらず、安全性・可読性・拡張性を高める重要な機構です。
プロパティを正しく使い分けることで、クラス設計がぐっと洗練されます。
慣れないうちは命名規則とアクセス修飾子の組み合わせに気を配ることから始めてみましょう!
み