Как ни странно, содержимое объекта типаstringне подлежит изменению. Это означает, что однажды созданную последовательность символов изменить нельзя. Но данное ограничение способствует более эффективной реализации символьных строк. Поэтому этот, на первый взгляд, очевидный недостаток на самом деле превращается в преимущество. Так, если требуется строка в качестве разновидности уже имеющейся строки, то для этой цели следует создать новую строку, содержащую все необходимые изменения. А поскольку неиспользуемые строковые объекты автоматически собираются в "мусор", то о дальнейшей судьбе ненужных строк можно даже не беспокоиться.
Следует, однако, подчеркнуть, что переменные ссылки на строки (т.е. объекты типаstring)подлежат изменению, а следовательно, они могут ссылаться на другой объект. Но содержимое самого объекта типаstringне меняется после его создания.
Для того чтобы стало понятнее, почему неизменяемые строки не являются помехой, воспользуемся еще одним методом обращения со строками:Substring . Этот метод возвращает новую строку, содержащую часть вызывающей строки. В итоге создается новый строковый объект, содержащий выбранную подстроку, тогда как исходная строка не меняется, а следовательно, соблюдается принцип постоянства строк. Ниже приведена рассматриваемая здесь форма методаSubstring:
string Substring(int
где
Ниже приведена программа, в которой принцип постоянства строк демонстрируется на примере использования методаSubstring.
// Применить метод Substring.
using System;
class SubStr {
static void Main {
string orgstr = "В C# упрощается обращение со строками.";
// сформировать подстроку
string substr = orgstr.Substring(5, 20);
Console.WriteLine("orgstr: " + orgstr);
Console.WriteLine("substr: " + substr);
}
}
Вот к какому результату приводит выполнение этой программы.
orgstr: В C# упрощается обращение со строками, substr: упрощается обращение
Как видите, исходная строка из переменнойorgstrне меняется, а выбранная из нее подстрока содержится в переменнойsubstr.