Например

class School
{
    public List<Student> Students {get; private set;}
}

Здесь School не является неизменным, потому что геттер Students является изменяемой коллекцией. Как сделать класс неизменным?

3
user1899020 11 Май 2016 в 20:26

2 ответа

Лучший ответ

Вместо этого вы можете просто предоставить неизменяемый список:

class School
{
    private readonly List<Student> _students = new List<Student>();

    public ReadOnlyCollection<Student> Students
    {
        get { return _students.AsReadOnly(); }
    }
}

Конечно, это по-прежнему не влияет на объекты Student, поэтому для того, чтобы объекты Student были полностью неизменяемыми, они должны быть неизменными.

5
poke 11 Май 2016 в 17:37

Просто сделайте свое вспомогательное поле частным полем и заставьте получатель общедоступного свойства возвращать версию списка только для чтения.

class School
{
    private List<Student> students;

    public ReadOnlyCollection<Student> Students
    {
        get
        {
            return this.students.AsReadOnly()
        }

        private set;
    }
}
3
James 11 Май 2016 в 17:45