Я подозреваю, что
SimpleBitVector32
изменчиво по тем же причинам, что и BitVector32
изменчиво. На мой взгляд, директива неизменяемая - это просто директива ; однако для этого нужно иметь действительно вескую причину .
Также рассмотрим Dictionary<TKey, TValue>
- я углублюсь в некоторые расширенные подробности здесь . Структура Entry
словаря является изменяемой - вы можете изменить TValue в любое время. Но Entry
логически представляет значение .
Изменчивость должна иметь смысл. Я согласен с @JoeWhite: кто-то хотел что-то вроде массива (хотя на самом деле это просто биты в 32-битном целом числе) ; также, что обе структуры BitVector могли бы быть ... неизменными .
Но, как общее утверждение, я не согласен с , вероятно, это было просто личное предпочтение программиста в стиле кодирования и больше склоняюсь к никогда не было [и нет] любая веская причина, чтобы изменить его . Просто знайте и понимайте ответственность за использование изменяемой структуры.
Редактировать
Для справки, я от всей души согласен, что вы должны всегда пытаться сделать структуру неизменной. Если вы обнаружите, что требования диктуют изменчивость элемента, вернитесь к проектному решению и подключите пиров.
Обновление
Изначально я не был уверен в своей оценке производительности, когда рассматривал изменчивый тип значения v. Неизменный. Однако, как указывает @David, Эрик Липперт пишет это :
Бывают моменты, когда вам нужно выжать каждый последний бит производительности
вне системы. И в этих сценариях иногда приходится
компромисс между чистым кодом, pure , надежным,
понятный, предсказуемый, модифицируемый и код, который не является ни одним из
выше, но невероятно быстро.
Я выделил pure , потому что изменяемая структура не соответствует чистому идеалу, что структура должна быть неизменной . У написания изменяемой структуры есть побочный эффект: понятность и предсказуемость скомпрометированы, как продолжает Эрик:
Изменяемые типы значений ... ведут себя
таким образом, что многие люди находят глубоко нелогичным, и тем самым
упростить написание глючного кода (или корректного кода, который легко
случайно превратился в глючный код.) Но да, они очень быстрые.
Смысл Эрика в том, что вы, как дизайнер и / или разработчик, должны принять осознанное и обоснованное решение. Как вы стали информированными? Эрик объясняет это также:
Я бы рассмотрел кодирование двух эталонных решений - одно с использованием
изменяемые структуры, одна из которых использует неизменяемые структуры - и запускать некоторые
реалистичные ориентированные на сценарии пользователя ориентиры. Но вот в чем дело: не выбирайте более быстрый. Вместо этого решите, прежде чем запустить тест
насколько медленно недопустимо медленно .
Мы знаем, что изменение типа значения на быстрее, чем создание нового типа значения; но учитывая правильность :
Если оба решения приемлемы, выберите тот, который является чистым,
правильно и достаточно быстро.
Ключ быстрый достаточно , чтобы компенсировать побочные эффекты выбора изменяемого по сравнению с неизменяемым. Только вы можете это определить.