例如
class School
{
public List<Student> Students {get; private set;}
}
此处School
不是不可变的,因为getter Students
是一个可变集合。如何使类不可变?
答案 0 :(得分:5)
您可以改为公开an immutable list:
class School
{
private readonly List<Student> _students = new List<Student>();
public ReadOnlyCollection<Student> Students
{
get { return _students.AsReadOnly(); }
}
}
当然,这样做仍然对Student
对象没有影响,因此要完全不可变,Student
对象需要是不可变的。
答案 1 :(得分:3)
只需将您的支持字段设为私有字段,并使公共属性的getter返回列表的只读版本。
class School
{
private List<Student> students;
public ReadOnlyCollection<Student> Students
{
get
{
return this.students.AsReadOnly()
}
private set;
}
}