C#_ 参照型につける readonly

readonly 再帰的には働かない。

readonly を付けた場所だけが読み取り専用になり、
参照先などについては書き換えが可能

 

ex )

    class MutableClass
    {
        // フィールドを直接公開
        public int X;

        // 書き換え可能なプロパティ
        public int Y { get; set; }

        // フィールドの値を書き換えるメソッド
        public void M(int value) => X = value;
    }

 

    class Main
    {
        static readonly MutableClass c = new MutableClass();
       
        static void Main()
        {
            // c = new MutableClass();
            // ↑は構文エラー
           
            c.X = 1;
            c.Y = 2;
            c.M(3);
            // ↑は書き換え出来てしまう
        }
    }

 

Main において、
c の書き換えはできないが c 自体にデータを持っているわけではない。

データMutableClass 持っている
MutableClass には readonly付いていないので、書き換えが出来る。

クラスを書き換えできないように作る場合、
クラス自体を書き換え不能に作る。
フィールドを readonly や get-only にしたり ( getter のみする )。

 

こちらから。
http://ufcpp.net/study/csharp/resource/readonlyness/

 

以上。