В чем разница между изменчивым и неизменным? - PullRequest
6 голосов
/ 28 сентября 2010

Может ли кто-нибудь помочь мне найти основную разницу между изменяемым и неизменным?

Ответы [ 7 ]

13 голосов
/ 28 сентября 2010

Неизменный означает, что после инициализации состояние объекта не может измениться.

Изменяемый означает, что он может.

Например, строки в .NET являются неизменяемыми.Всякий раз, когда вы выполняете операцию со строкой (обрезки, верхний регистр и т. Д.), Создается новая строка.

На практике, если вы хотите создать неизменный тип, вы разрешаете использовать только геттеры для него ине допускайте никаких изменений состояния (поэтому любое закрытое поле не может измениться после завершения работы конструктора).

4 голосов
/ 28 сентября 2010

A очень простое определение будет:

Изменяемые объекты : если у вас есть ссылка на экземпляр объекта, содержимое этогоЭкземпляр можно изменить

Неизменяемые объекты: Если у вас есть ссылка на экземпляр объекта, содержимое этого экземпляра не может быть изменено

3 голосов
/ 28 сентября 2010

Неизменяемый означает, что «невозможно изменить после его создания».

  • Неизменяемый тип имеет конструктор и методы получения, но не методы установки.У типа также могут быть сеттеры.

Примером неизменяемого типа является DateTime.Метод AddMinutes не изменяет объект - он создает и возвращает новый DateTime.

Другим примером является строка.Для изменяемого класса, похожего на строку, вы можете использовать класс StringBuilder.

В C # нет ключевого слова для объявления типа как неизменяемого.Вместо этого вы должны пометить все поля-члены как readonly, чтобы гарантировать, что они могут быть установлены только в конструкторе.Это предотвратит случайное изменение одного из полей, нарушая неизменность.

2 голосов
/ 28 сентября 2010

Неизменяемый тип не может быть изменен после создания экземпляра.Например строки являются неизменяемыми.Каждый раз, когда вы хотите изменить значение строки, создается новый экземпляр.

1 голос
/ 17 мая 2012

Преимущества неизменяемости:

1 Безопасность потоков
2 Совместное использование
3 Меньше подверженных ошибкам

Поэтому предпочитайте неизменность, если у вас есть выбор.:)

1 голос
/ 28 сентября 2010

Использование неизменяемых переменных в функциональных языках.Использование переменной термина неуместно, и функциональные программисты предпочитают термин value.

0 голосов
/ 09 июля 2015

Использовать ссылку
imaginationhunt.blogspot

МОЖЕТ ЛИ ВНУТРЕННЯЯ ИЛИ НЕМАТУБНАЯ В .NET?

Изменяемый: изменяемый означает, чье состояние может быть изменено после его создания.
Неизменяемый: Неизменяемый означает, состояние которого нельзя изменить после его создания.

Строковые объекты являются «неизменяемыми», это означает, что мы не можем изменять символы, содержащиеся в строке, и операция над строкой создает измененную версию, а не изменяет символы строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...