Я работаю над созданием неизменяемого класса.
Я пометил все свойства как доступные только для чтения.
У меня есть список предметов в классе.
Хотя, если свойство доступно только для чтения, список можно изменить.
Открытие IEnumerable списка делает его неизменяемым.
Я хотел знать, каковы основные правила, которым нужно следовать, чтобы сделать класс неизменяемым?
c#
.net
immutability
Biswanath
источник
источник
atomicity
,volatility
иimmutability
: Часть первая , часть вторая , и часть третья . Это из его личного блога, и я считаю, что они более удобны для новичков, чем его сообщения в MSDN.Ответы:
Я думаю, ты на правильном пути -
источник
Чтобы быть неизменными, все ваши свойства и поля должны быть доступны только для чтения. И элементы в любом списке должны быть неизменными.
Вы можете сделать свойство списка только для чтения следующим образом:
источник
basic rules to make a class (that contains a list) immutable
. Семантика ImmutableList позволяет более эффективно использовать память при добавлении элементов в копию списка, но мне кажется, что это более конкретный вариант использования.Также имейте в виду, что:
не является неизменным, даже если он помечен ключевым словом readonly. Вы по-прежнему можете изменять ссылки / значения отдельных массивов с помощью средства доступа к индексу.
источник
Воспользуйтесь
ReadOnlyCollection
классом. Он находится вSystem.Collections.ObjectModel
пространстве имен.Для всего, что возвращает ваш список (или в конструкторе), установите список как доступную только для чтения коллекцию.
источник
Другой вариант - использовать шаблон посетителя вместо того, чтобы вообще открывать какие-либо внутренние коллекции.
источник
Использование ReadOnlyCollection ограничит возможность клиента изменять его.
источник