Resharper, всегда предлагающий, чтобы я заставил константу представить в виде строки вместо строки

«Гуманный интерфейс» Джефа Раскина стоит прочитать. Диалоговое окно - последнее средство и признак плохого дизайна. Большинство из них не нужны, и, как вы обнаружили, все игнорируются пользователями.

Почему существует диалоговое окно? Решите эту проблему - не просите пользователей подтвердить операцию, вместо этого упростите ее отмену. Не открывайте диалоговое окно с сообщением об ошибке - в любом случае сделайте восстановление, которое вы собираетесь сделать (или все, что возможно). Определенно не показывайте диалоговые окна, которые имеют только один результат (только «ОК» - это дьявол), представьте информацию в приложении ненавязчиво.

10
задан uzay95 26 May 2009 в 08:57
поделиться

4 ответа

The latter is better - it means that:

  • This isn't an instance variable, so you don't end up with a redundant string reference in every instance that you create
  • You won't be able to change the variable (which you presumably don't want to)

There are some other effects of "const" in terms of access from other assemblies and versioning, but it looks like this is a private field so it shouldn't be an issue. You can mostly think of it as being:

static readonly string sQuery = ...;

In general I believe it's a good idea to make fields static when you can (if it doesn't vary by instance, why should it be an instance variable?) and read-only when you can (mutable data is harder to reason about). Let me know if you want me to go into the details of the differences between static readonly and const.

21
ответ дан 3 December 2019 в 15:53
поделиться

Если строка никогда не изменяется и никогда не используется вне вашей сборки, то хорошей идеей будет const. Если он никогда не изменяется, но используется вне вашей сборки, статическое чтение может быть лучшей идеей - константы «выгорают» в месте вызова, а не хранятся в одном месте, поэтому перекомпилируйте сборку, которая содержит константу, не обновляет зависимые сборки - их тоже нужно перекомпилировать. С другой стороны, статические переменные только для чтения обновляются в зависимых сборках.

4
ответ дан 3 December 2019 в 15:53
поделиться

ReSharper предлагает это только в том случае, если конкретная строковая ссылка никогда не меняется. В этом случае вы выражаете свое намерение, используя const string вместо просто string .

1
ответ дан 3 December 2019 в 15:53
поделиться

Это происходит потому, что если вы случайно присваиваете новое значение sQuery в своем коде, если это константа, вы получите ошибку компиляции, поэтому ошибка будет обнаружена во время компиляции. То же самое с предложением сделать переменные-члены, которые установлены в ctor, только для чтения

1
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: