Похожая тема Символьные массивы в c#
Основным типом при работе со строками является тип string, задающий строки переменной длины. Класс String в языке C# относится к ссылочным типам. Над строками (объектами этого класса) определён широкий набор операций. Объекты класса String объявляются как все прочие объекты простых типов. Можно сконструировать строку из:
- символа, повторенного заданное число раз;
- массива символов char[];
- части массива символов.
Примеры объявления строк:
// объявление с инициализацией значением Сайт
string world = "Сайт";
// строка в куче из пяти повторяющихся символов
string sssss = new string('s',5);
// string s1 = new string("s1"); так нельзя
// string s2 = new string(); так тоже нельзя
// а так можно
string s2; // это и есть объявление пустой строки в куче
// преобразование в символьный массив явно заданной строки
char[] yes = "Привет посетителям портала!".ToCharArray();
// объявление строки с инициализацией символами из массива
string stryes = new string(yes);
// объявление с копированием подстроки Привет
// (с нулевого шесть символов)
string strye = new string(yes, 0, 6);
Над строками определены следующие операции:
- присваивание (=);
- две операции проверки эквивалентности: равно (= =) и не равно (!=);
- конкатенация (объединение) или сцепление строк (+);
- взятие индекса ([]).
Операция присваивания имеет важную особенность. Поскольку string – это ссылочный тип, то в результате присваивания создаётся ссылка на константную строку, хранимую в "куче". С одной и той же строковой константой в "куче" может быть связано несколько переменных строкового типа. Но эти переменные не являются псевдонимами, т.е. не являются разными именами одного и того же объекта. Дело в том, что строковые константы в "куче" не изменяются, потому что класс string относится к неизменяемым классам (immutable). Поэтому когда одна из переменных получает новое значение, она связывается с новым константным объектом в "куче". Остальные переменные сохраняют свои связи. Для программиста это означает, что семантика присваивания строк аналогична семантике значимого присваивания. Отсюда следует, что в отличие от других ссылочных типов операции, проверяющие эквивалентность (совпадение строк), сравнивают значения строк, а не ссылки. Эти операции выполняются как над значимыми типами.
Бинарная операция "+" сцепляет две строки, приписывая вторую строку к хвосту первой. Возможность взятия индекса при работе со строками отражает тот приятный факт, что строку можно рассматривать как массив и получать без труда каждый её символ. Каждый символ строки имеет тип char, доступный, правда, только для чтения, но не для записи. Рассмотрим пример:
string s1 = "ABC", s2 = "CDE";
// новая строка в куче как объединение строк
string s3 = s1 + s2;
// строка s2 получает новое значение в виде ссылки на АВС
s2 = s1; // значение CDE – объект для сборщика мусора
// строка s2 получает новое значение и новое место в куче
s2 = “FGH’; // а s1 сохраняет старое значение и ссылку
// ch1 получает значение А, ch2 – значение F
char ch1 = s1[0], ch2 = s2[0];
// а вот так нельзя – значение строки неизменяемое
// s1[0] = 'L'; s2[1] = ch1;
В C# существуют два вида строковых констант:
- обычные константы, которые представляют строку символов, заключённую в кавычки;
- @-константы, заданные обычной константой c предшествующим знаком @.
В обычных константах некоторые символы интерпретируются особым образом. Связано это, прежде всего, с тем, что необходимо уметь задавать в строке непечатаемые символы, такие, как, например, символ табуляции. Возникает необходимость задавать символы их кодом – в виде escape-последовательностей. Для всех этих целей используется комбинация символов, начинающаяся символом "\" - обратная косая черта. Так, пары символов: ‘\n’, ‘\t’, ‘\\’, ‘\"’ задают соответственно символ перехода на новую строку, символ табуляции, сам символ обратной косой черты, символ кавычки, вставляемый в строку, но не сигнализирующий о её окончании. Комбинация "\xNNNN" задаёт символ, определяемый шестнадцатеричным кодом NNNN. Хотя такое решение возникающих проблем совершенно естественно, иногда возникают неудобства: например, при задании констант, определяющих путь к файлу, приходится каждый раз удваивать символ обратной косой черты. Это одна из причин, по которой появились @-константы.
В @-константах все символы трактуются в полном соответствии с их изображением. Поэтому путь к файлу лучше задавать @-константой. Единственная проблема в таких случаях: как задать символ кавычки, чтобы он не воспринимался как конец самой константы. Решением является удвоение символа. Вот соответствующий пример:
// Задание имен файла двумя видами констант
s1 = "d:\\skill\\coding\\article.doc";
s2 = @"d:\skill\coding\article.doc";
Ниже приведены статические методы и свойства класса String.

Метод Format в примерах статей на нашем портале уже встречался. Всякий раз, когда выполнялся вывод результатов на консоль, неявно вызывался и метод Format. Рассмотрим оператор печати:
Console.WriteLine("s1 = {0}, s2 = {1}", s1,s2);
Здесь строка, задающая первый аргумент метода, помимо обычных символов, содержит форматы, заключённые в фигурные скобки. В данном примере используется простейший вид формата – он определяет объект, который должен быть подставлен в участок строки, занятый данным форматом.
Кроме статических методов, класс имеет динамические методы и свойства.
