This question already has answers here:
How do I create an immutable Class?
(6个答案)
6年前关闭。
我只是看着
考虑这个例子。
为了使其真正只读,我必须将
有什么方法可以使现有的类不可变?
(6个答案)
6年前关闭。
我只是看着
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
设置为只读。这是一个自定义类,可以修改该类。如果我的列表属于具有getter和setter属性的内置.net类,该怎么办?我认为在那种情况下,我必须编写该.net类的包装,该包装只允许读取该值。有什么方法可以使现有的类不可变?
最佳答案
一个真正不可变的类是其属性和字段均为只读的类。该定义是递归的,因为该类的字段和属性中包含的所有类也必须是只读的。您的只读列表不是真正不变的,因为列表的内容不是不变的,因为正如您所说的,您可以对其进行修改。为了使IReadOnlyList<T>
真正不可变,列表中的各个项目也必须是只读的。
08-19 15:18