Подтвердить что ты не робот

Почему Resharper предпочитает consts только для чтения?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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