Почему Resharper предпочитает conts только для чтения? - PullRequest
12 голосов
/ 03 августа 2010

Я заметил предложение Решарпера в разделе «Обычные практики и улучшения кода»: Преобразование локальной переменной или поля в константу .

Я также заметил это в книге Билла Вагнера " Эффективное C #: 50 конкретных способов улучшить ваш C #"существует языковая идиома" Предпочитают только чтение const", в котором автор объясняет риски использования conss.

Мой вопросречь идет не о различиях между readonly и const и о том, когда их использовать, а о том, почему один источник считает const обычной практикой / улучшением кода, а с другой стороны, второй воспринимает readonly как идиому?

Ответы [ 2 ]

9 голосов
/ 03 августа 2010

Частные константы не несут того же риска, что и публичные константы. Решарпер предположительно предлагает оптимизировать производительность для случаев, когда поле не видно снаружи.

2 голосов
/ 03 августа 2010

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

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

Однако это допустимый аргумент, если значениене будет меняться на протяжении всей жизни приложения, я все же думаю, что лучше использовать const.Мне нравится использовать readonly для значений, которые я загружаю из конфигурации, например, которые не изменятся после инициализации в конструкторе.

Я думаю, что гораздо лучше иметь кодясность, которую const обеспечивает за счет возможного немного большего обслуживания компиляции.

...