はじめに
今回はイミュータブル(Immutable)クラスについて書いていきたいと思います。
ネットサーフィンをしていたところ以下の記事を見つけました。
www.c-sharpcorner.com
正直私自身理解が曖昧だったのですが、これを機に少し勉強してみたいと思いました。
もしかしたら間違った情報を書いているかもしれませんので、そこの点はご了承ください。
イミュータブルとは
イミュータブルとはオブジェクトの作成時以外にプロパティを変更することができないものを指します。
string
なんかがよく例として紹介されていたりしますね。
String クラス (System) | Microsoft Docs
作り方1
- ReadOnlyなプロパティを作成
- コンストラクタでプロパティを初期化
public class Monster { // ① Readonlyなプロパティ public string Name { get; } public int HP { get; } // ② publicなコンストラクター public Monster(string name, int hp) { Name = name; HP = hp; } }
使うとき。
static void Main(string[] args) { var monter = new Monster("Slime", 10); // OK Console.WriteLine(monter.HP); // エラー monter.HP = 20; }
作り方2
- ReadOnlyなプロパティを作成
- プロパティを初期化するprivateなコンストラクタを定義
- インスタンスを生成する静的メソッドを作成
public class Monster { // ① Readonlyなプロパティ public string Name { get; } public int HP { get; } // ② privateなコンストラクター private Monster(string name, int hp) { Name = name; HP = hp; } // ③ Static Method public static Monster Create(string name, int hp) => new Monster(name, hp); }
使う側。
static void Main(string[] args) { var monter = Monster.Create("slime", 10); // OK Console.WriteLine(monter.HP); // エラー monter.HP = 20; }