Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

2.4.4.5Строковые литералы

В C# поддерживается две формы строковых литералов: правильные строковые литералы и буквальные строковые литералы.

Правильный строковый литерал состоит из нуля или более символов, заключенных в двойные кавычки, например "hello", и может включать как простые управляющие последовательности (например \t для символа табуляции), так и шестнадцатеричные escape-последовательности и escape-последовательности Юникода.

Буквальный строковый литерал состоит из символа «@» с последующими символом двойных кавычек, нулем или более символов и закрывающим символом двойных кавычек. Простым примером является @"hello". В буквальном строковом литерале символы между разделителями интерпретируются буквально, единственным исключением является управляющая_последовательность_кавычки. В частности, простые управляющие последовательности, шестнадцатеричные escape-последовательности и escape-последовательности Юникода не обрабатываются в буквальных строковых литералах. Буквальный строковый литерал может занимать несколько строк.

строковый_литерал: правильный_строковый_литерал буквальный_строковый_литерал

правильный_строковый_литерал: " символы_правильного_строкового_литераланеобязательно "

символы_правильного_строкового_литерала: символ_правильного_строкового_литерала символы_правильного_строкового_литерала символ_правильного_строкового_литерала

символ_правильного_строкового_литерала: один_символ_правильного_строкового_литерала простая_управляющая_последовательность шестнадцатеричная_управляющая_последовательность управляющая_последовательность_Юникода

один_символ_правильного_строкового_литерала: Любой символ за исключением символа кавычек (") (U+0022), косой черты (\) (U+005C) и символа_следующей_строки

буквальный_строковый_литерал: @" символы_буквального_строкового_литераланеобязательно "

символы_буквального_строкового_литерала: символ_буквального_строкового_литерала символы_буквального_строкового_литерала символ_буквального_строкового_литерала

символ_буквального_строкового_литерала: один_символ_буквального_строкового_литерала управляющая_последовательность_кавычки

один_символ_буквального_строкового_литерала: любой символ, кроме "

управляющая_последовательность_кавычки: ""

Символ, следующий за символом обратной косой черты (\) в символе_правильного_строкового_литерала, должен быть одним из следующих символов: ', ", \, 0, a, b, f, n, r, t, u, U, x, v. В противном случае произойдет ошибка времени компиляции.

Например:

string a = "hello, world"; // hello, world string b = @"hello, world"; // hello, world

string c = "hello \t world"; // hello world string d = @"hello \t world"; // hello \t world

string e = "Joe said \"Hello\" to me"; // Joe said "Hello" to me string f = @"Joe said ""Hello"" to me"; // Joe said "Hello" to me

string g = "\\\\server\\share\\file.txt"; // \\server\share\file.txt string h = @"\\server\share\file.txt"; // \\server\share\file.txt

string i = "one\r\ntwo\r\nthree"; string j = @"one two three";

Выше показаны разнообразные строковые литералы. Последний строковый литерал j является буквальным строковым литералом, занимающим несколько строк. Символы между кавычками, включая пробелы, например символы новой строки, сохраняются буквально.

Поскольку в шестнадцатеричной escape-последовательности может быть переменное число шестнадцатеричных цифр, строковый литерал "\x123" содержит один символ с шестнадцатеричным значением 123. Чтобы создать строку, содержащую символ с шестнадцатеричным значением 12 и с последующим символом 3, можно написать "\x00123" или "\x12" + "3".

Строковый_литерал имеет тип string.

Результатом каждого строкового литерала не обязательно является новый экземпляр строки. Если два или более строковых литерала, эквивалентных согласно оператору равенства строк (§7.10.7), появляются в одной программе, эти строковые литералы ссылаются на один и тот же экземпляр строки. Например, программа

class Test { static void Main() { object a = "hello"; object b = "hello"; System.Console.WriteLine(a == b); } }

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]