EDIT: хотя я сильно подозреваю, что приведенное ниже утверждение верно для всех реализаций компилятора C #, я не уверен, что оно действительно гарантировано в спецификации. В разделе 2.4.4.5 спецификации говорится о литералах , ссылающихся на тот же экземпляр строки, но в нем не упоминаются другие константные строковые выражения. Я подозреваю это упущение в спецификации - я напишу об этом Мэдсу и Эрику.
Это не просто строковые литералы. Это любая строка константа . Так, например, рассмотрим:
public const string X = "X";
public const string Y = "Y";
public const string XY = "XY";
void Foo()
{
string z = X + Y;
}
Компилятор понимает, что конкатенация здесь (для z
) находится между двумя константными строками, и поэтому результат также является константной строкой. Поэтому начальное значение z
будет той же ссылкой, что и значение XY
, поскольку они являются константами времени компиляции с тем же значением.
РЕДАКТИРОВАТЬ: Ответ Мэдс и Эрик предположил, что в строковых константах компилятора Microsoft C # и строковых литералах обычно обычно обрабатываются одинаково - но другие реализации могут отличаться.