【ClassPractice11】set を追加して制御してみよう

前回はこうでした。

public int CurrentHp
{
    get { return Hp; }
}

読むことはできました。

でも、書き換えはできません。

今回は、

書き換えはできるけれど、安全にする

方法を学びます。


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

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

② Playerクラスを書く

namespace ClassPractice11
{
    public class Player
    {
        public string Name;
        private int Hp;
        private int MaxHp;

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

        public int CurrentHp
        {
            get { return Hp; }
            set
            {
                if (value < 0)
                {
                    Hp = 0;
                }
                else if (value > MaxHp)
                {
                    Hp = MaxHp;
                }
                else
                {
                    Hp = value;
                }
            }
        }
    }
}

ここが新しい部分

set
{
    ...
}

value という特別な名前が出てきました。

これは、

外から渡された値

です。


③ Program.cs

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

Console.WriteLine(p1.CurrentHp);

p1.CurrentHp = -50;
Console.WriteLine(p1.CurrentHp);

p1.CurrentHp = 500;
Console.WriteLine(p1.CurrentHp);

実行結果

100
0
100

何が起きている?

外から

p1.CurrentHp = -50;

としても、

set の中で制御されます。

つまり、

書き換えは許可する

でもルールは守らせる

設計になりました。


今日のポイント

✔ get は「取得」

✔ set は「設定」

✔ value は外から来た値

✔ set の中で制御できる


まとめ

private → 守る

get → 見せる

set → 制御しながら変更させる

ここまで来ると、

C#のオブジェクト設計の基礎はほぼ完成です。


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