【ClassPractice10】プロパティを使ってみよう

今のクラスはこうなっています。

public int GetHp()
{
    return Hp;
}

Program.cs ではこう書いています。

Console.WriteLine(p1.GetHp());

少し考えてみましょう。

Hp は「データ」です。

でも、

メソッドの形で取りに行っている

少し違和感があります。


解決方法

メソッドのように安全で、

変数のように書ける仕組み

これが プロパティ です。


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

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

② Playerクラスを書く

namespace ClassPractice10
{
    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 void TakeDamage(int damage)
        {
            Hp -= damage;

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

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

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

        public int CurrentHp
        {
            get { return Hp; }
        }
    }
}

ここがプロパティ

public int CurrentHp
{
    get { return Hp; }
}

見た目は変数のようですが、

中身は処理です。


③ Program.cs

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

Console.WriteLine(p1.CurrentHp);

p1.TakeDamage(30);

Console.WriteLine(p1.CurrentHp);

実行結果

100
70

何が変わったのか?

以前:

p1.GetHp();

今:

p1.CurrentHp

変数のように書けます。

でも、

  • Hp は private のまま
  • 外から直接触れない

安全性は保たれています。


今日のポイント

✔ プロパティは「変数のように使える」

✔ 中身は処理

✔ 安全性はそのまま


まとめ

  • private で守る
  • メソッドで公開する
  • プロパティで自然に公開する

ここまで来ると、

C#らしい書き方に入っています。


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