Разрешены ли указатели в неизменяемом объекте? - PullRequest
0 голосов
/ 08 февраля 2011

Ключи словаря в C # (вероятно, в большинстве языков) должны быть неизменяемыми.

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

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

Разрешено ли это для неизменных объектов?
Это считается плохой практикой или наоборот хорошей практикой?

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Вы можете иметь указатели в неизменяемом объекте, это разница между мелкой и глубокой неизменяемостью.

Посмотрите в блоге MSDN Неизменяемость в C # Часть первая: Виды неизменяемости

0 голосов
/ 24 сентября 2011

Нет ничего плохого в том, что объект содержит неизменную ссылку на изменяемый объект.По общему мнению, иногда это может быть полезным.Например, коллекция может содержать многочисленные методы перечисления.Простейшим способом достижения этого может быть определение ряда структур, каждая из которых содержит один элемент: ссылку на коллекцию и реализует IEnumerable.GetEnumerator, вызывая соответствующий метод в коллекции.Например, структура MyMultiSortedKeyDictionary.EnumeratorByFirstKey будет содержать ссылку на MyMultiSortedkeyDictionary и реализовать IEnumerable.GetEnumerator путем вызова GetFirstKeyEnumerator в корневой коллекции.Структура .EnumeratorBySecondKey будет аналогичной, но вызовет GetSecondKeyEnumerator.Обе структуры будут неизменными, но каждая будет содержать ссылку на изменяемый объект.

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