readonlyのListの要素は変更出来るか?

スポンサーリンク

readonlyの要素が変更出来てしまって混乱したため、調べた内容をまとめておきます。

readonlyの要素が変更出来るかどうかは、結論、変更出来ます。

以下のようにreadonlyのListに値を追加出来ました。

public class Test
{
    private readonly IList<int> _intList = new List<int>();
    public void Change()
    {
        _intList.Add(0);
    }
}

それでは何がreadonlyなのでしょうか?

以下のようにreadonlyのListを新しいListのインスタンスで置き換えようとするとエラーが出ました。

public class Test
{
    private readonly IList<int> _intList = new List<int>();
    public void Change()
    {
        _intList = new List<int>();
    }
}

エラーの内容

CS0191:読み取り専用フィールドに割り当てることは出来ません(フィールドが定義されている型のコンストラクターかinit専用セッター、または変数初期化子では可)

readonlyについて調べてみた結果、readonlyはreadonlyを付けた変数の参照先のみを読み取り専用にするみたいです。

つまり、readonlyを付けた変数の参照先の要素は読み取り専用にはなっていないということでした。

以下に参考サイトを載せておきます。

readonly の注意点
概要 「定数」で、読み取り専用のフィールドが作れるという話をしました。 この時点ではまだクラスや構造体、値型と参照型の違いなどについて触れていなかったのでreadonly修飾子の簡単な紹介だけに留めましたが、 本項…

コメント

タイトルとURLをコピーしました