Это рассматривается в разделе 2.4.4.5 спецификации C # :
2.4.4.5 Строковые литералы
C # поддерживает две формы строковых литералов: обычные строковые литералы и дословные строковые литералы.
Обычный строковый литерал состоит из нуля или более символов, заключенных в двойные кавычки, как в «привет», и может включать как простые escape-последовательности (например, \ t для символа табуляции), так и шестнадцатеричные и escape-последовательности Unicode.
Строковый литерал состоит из символа @, за которым следует символ двойной кавычки, ноль или более символов и закрывающий символ двойной кавычки. Простой пример - @ "привет". В дословном строковом литерале символы между разделителями интерпретируются дословно, единственное исключение составляет кавычка-escape-последовательность. В частности, простые escape-последовательности, а также шестнадцатеричные и Unicode escape-последовательности не обрабатываются в дословных строковых литералах. Строковый литерал может содержать несколько строк.
Другими словами, единственный специальный символ в @ "дословном строковом литерале" - это символ двойной кавычки. Если вы хотите написать дословную строку, содержащую двойные кавычки, вы должны написать две двойные кавычки. Все остальные символы интерпретируются буквально.
Вы можете даже иметь буквальные новые строки в буквальном строковом литерале. В обычном строковом литерале вы не можете иметь буквально новые строки. Вместо этого вы должны использовать, например, "\n"
.
Строковые литералы строк часто полезны для встраивания имен файлов и регулярных выражений в исходный код, поскольку обратные слеши в этих типах строк являются общими и их необходимо экранировать, если использовать обычный строковый литерал.
Нет никакой разницы во время выполнения между строками, созданными из обычных строковых литералов, и строками, созданными из буквальных строковых литералов - они оба имеют тип System.String
.