Решарпер всегда предлагает мне сделать константную строку вместо строки - PullRequest
10 голосов
/ 26 мая 2009

какой из них хорош:

string sQuery = "SELECT * FROM table";

или

const string sQuery = "SELECT * FROM table";

И почему Решарпер всегда предлагает мне это сделать?

Ответы [ 4 ]

20 голосов
/ 26 мая 2009

Последнее лучше - это значит, что:

  • Это не переменная экземпляра, поэтому вы не получите избыточную ссылку на строку в каждом создаваемом вами экземпляре
  • Вы не сможете изменить переменную (которую вы, вероятно, не хотите)

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

static readonly string sQuery = ...;

В целом, я считаю хорошей идеей сделать поля статичными, когда вы можете (если они не зависят от экземпляра, почему это должна быть переменная экземпляра?) И только для чтения, когда можете (изменяемые данные труднее причина о). Дайте мне знать, если вы хотите, чтобы я подробно рассказал о различиях между static readonly и const.

4 голосов
/ 26 мая 2009

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

1 голос
/ 26 мая 2009

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

1 голос
/ 26 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...