IReadOnlyList<T>
読み取り専用リストを作成することを調べました。しかし、100% 読み取り専用ではないと思います。リストからアイテムを追加/削除することはできませんが、メンバーを変更することはできます。
この例を考えてみましょう。
class Program
{
static void Main(string[] args)
{
List<Test> list = new List<Test>();
list.Add(new Test() { MyProperty = 10 });
list.Add(new Test() { MyProperty = 20 });
IReadOnlyList<Test> myImmutableObj = list.AsReadOnly();
// I can modify the property which is part of read only list
myImmutableObj[0].MyProperty = 30;
}
}
public class Test
{
public int MyProperty { get; set; }
}
本当に読み取り専用にするにはMyProperty
、読み取り専用にする必要があります。これはカスタム クラスです。クラスを変更することができます。私のリストがゲッターとセッターの両方のプロパティを持つ組み込みの.netクラスの場合はどうなりますか? その場合、値の読み取りのみを許可するその.netクラスのラッパーを作成する必要があると思います。
既存のクラスを不変にする方法はありますか?