Безопасно ли использовать public const со строками? - PullRequest
3 голосов
/ 07 апреля 2011

Я слышал, что это плохая идея сделать что-то вроде:

public const double Pi = 3;

потому что позже, когда я пойму, что мне нужно изменить его на 3.14, другие сборки не смогут увидеть изменения, пока они тоже не будут перекомпилированы. Поэтому readonly будет лучшим выбором.

То же самое относится к строкам? Например, с

public const string Name = "Buh";

это только ссылка, которая постоянна, верно? Или компилятор делает что-то умное здесь?

Является ли строковый литерал "Buh" встроенным в другие сборки? Или только ссылка на "Бух" встроена?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

http://weblogs.asp.net/psteele/archive/2004/01/27/63416.aspx

const - время компиляции, так что вы правы: используйте readonly, если оно может измениться в будущем!

2 голосов
/ 07 апреля 2011

Дело в том, что перед созданием IL компилятор заменит все константы фактическим значением константы, поэтому не имеет значения, какой это тип. Если это строка типа double, int или что-то еще, сборки, использующие const, будут продолжать использовать старое значение до тех пор, пока они не будут перекомпилированы, так как скомпилированный IL не знает никакой когда-либо существующей константы. Он просто знает о самом значении, точно так же, как если бы вы непосредственно его закодировали.

С другой стороны,

readonly оценивается как другие поля, не предназначенные только для чтения, и поэтому изменения будут видны другим сборкам независимо от типа поля только для чтения.

1 голос
/ 07 апреля 2011

строки являются неизменяемыми, поэтому они такие же, как и для double.

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