Я заметил предложение Resharper при "Общих Методах и Улучшениях Кода": Преобразуйте локальную переменную или поле к константе.
Я также заметил что в книге Bill Wagner "Эффективный C#: 50 Особенных методов Улучшить Ваш C#" существуют идиома языка, "Предпочитают только для чтения константе", в котором авторе объясняют риски использования consts.
Мой вопрос не о различиях между только для чтения и константой и когда использовать их, но почему один источник поместил константу как обычную практику / улучшение кода и в другой руке, вторые обработки, только для чтения как идиома?
Частные константы не несут те же риски, что и общедоступные константы. Resharper предположительно предлагает оптимизацию производительности для случаев, когда поле не видно извне.
По моему опыту работы с Resharper, вы получите это предложение, если вы устанавливаете значение переменной в объявлении, но значение переменной никогда не изменяется на протяжении всего метода. В этом случае его можно превратить в локальную константу. Вы также получите предупреждение о переменной экземпляра, которую вы инициализируете на месте, но никогда не изменяете значение где-либо в теле класса.
И автор этой книги в основном утверждает, что, используя readonly
вместо const, вы можете избежать необходимости перестраивать зависимые сборки, если измените значение readonly
. . Напротив, для изменения на const
вам придется перекомпилировать зависимые сборки для новой версии сборки с const
.
Это законный аргумент, однако, если значение не будет меняться в течение всего срока службы приложения, я все же думаю, что лучше использовать const
. Мне нравится использовать readonly
для значений, которые я загружаю из конфигурации, например, которые не изменятся после инициализации в конструкторе.
Я думаю, что гораздо лучше иметь ясность кода, которую обеспечивает const
, возможно, за счет небольшой дополнительной поддержки компиляции.