【ClassPractice13】set を private にしてみよう

前回はこうでした。

public int CurrentHp { get; set; }

これだと、

p1.CurrentHp = -999;

ができてしまいます。

今回は、

外からは「読むだけ」

変更はクラスの中だけ

にします。


① プロジェクトを追加する

  1. ExtraPractice.sln を開く
  2. 右クリック → 「追加」→「新しいプロジェクト」
  3. 「コンソール アプリ」
  4. プロジェクト名
ClassPractice13
  1. 作成

② Playerクラスを書く

namespace ClassPractice13
{
    public class Player
    {
        public string Name { get; set; }

        public int CurrentHp { get; private set; }

        private int MaxHp;

        public Player(string name, int maxHp)
        {
            Name = name;
            MaxHp = maxHp;
            CurrentHp = maxHp;
        }

        public void TakeDamage(int damage)
        {
            CurrentHp -= damage;

            if (CurrentHp < 0)
            {
                CurrentHp = 0;
            }
        }

        public void Heal(int amount)
        {
            CurrentHp += amount;

            if (CurrentHp > MaxHp)
            {
                CurrentHp = MaxHp;
            }
        }
    }
}

ここがポイント

public int CurrentHp { get; private set; }
  • get は public
  • set は private

つまり、

外からは読める

外からは変更できない


③ Program.cs

Player p1 = new Player("勇者", 100);

Console.WriteLine(p1.CurrentHp);

p1.TakeDamage(30);

Console.WriteLine(p1.CurrentHp);

// これはエラーになります
// p1.CurrentHp = 500;

実行結果

100
70

何が良くなったのか?

  • HPは外から勝手に変更できない
  • 変更はメソッド経由のみ
  • 上限・下限も守られる

つまり、

安全な設計

になりました。


今日のポイント

✔ get は公開できる

✔ set だけ制限できる

✔ データの安全性が上がる


まとめ

これで、

  • データを守る
  • 必要な情報だけ公開する
  • 変更はルール付き

という設計が完成しました。

訪問数 3 回, 今日の訪問数 3回