【ClassPractice13】set を private にしてみよう
前回はこうでした。
public int CurrentHp { get; set; }
これだと、
p1.CurrentHp = -999;
ができてしまいます。
今回は、
外からは「読むだけ」
変更はクラスの中だけ
にします。
① プロジェクトを追加する
- ExtraPractice.sln を開く
- 右クリック → 「追加」→「新しいプロジェクト」
- 「コンソール アプリ」
- プロジェクト名
ClassPractice13
- 作成
② 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回



ディスカッション
コメント一覧
まだ、コメントがありません