После создания строки последовательность составляющих ее символов не может быть изменена. Благодаря этому ограничению строки реализуются в C# более эффек тивно. И хотя такое ограничение кажется на первый взгляд серьезным препятствием, на самом деле оно таковым не является. Когда требуется получить строку как разно видность уже существующей строки, достаточно создать новую строку, содержащую требующиеся изменения, и "отвергнуть" исходную строку, если она больше не нужна. А поскольку ненужные строковые объекты автоматически утилизируются средствами "сборки мусора", то беспокоиться о дальнейшей судьбе "отвергнутых" строк не при ходится. Следует, однако, подчеркнуть, что переменные ссылок на строки могут, безу словно, изменить объект, на который они ссылаются. Но сама последовательность сим волов в конкретном строковом объекте не подлежит изменению после его создания.
Для создания строк, которые нельзя изменить, в C# предусмотрен класс StringBuilder, находящийся в пространстве имен System.Text. Но на практике для этой цели чаще используется тип string, а не класс StringBuilder. Класс String
Класс String определен в пространстве имен System. В нем реализуются следую щие интерфейсы: IComparable, IComparable, ICloneable, IConvertible, IEnumerable, IEnumerable и IEquatable. Кроме того, String — герметичный класс, а это означает, что он не может наследоваться. В классе String предоставляются все необходимые функциональные возможности для обработки сим вольных строк в С#. Он служит основанием для встроенного в C# типа string и явля ется составной частью среды .NET Framework. В последующих разделах представлено подробное описание класса String. Конструкторы класса String
В классе String определено несколько конструкторов, позволяющих создавать строки самыми разными способами. Для создания строки из символьного массива служит один из следующих конструкторов. public String(char[ ] value) public String(char[ ] value, int startIndex, int length)
Первая форма конструктора позволяет создать строку, состоящую из символов мас сива value. А во второй форме для этой цели из массива value извлекается опреде ленное количество символов (length), начиная с элемента, указываемого по индексу startIndex.
С помощью приведенного ниже конструктора можно создать строку, состоящую из отдельного символа, повторяющегося столько раз, сколько потребуется: public String(char с, int count)
где с обозначает повторяющийся символ; a count — количество его повторений.
Кроме того, строку можно создать по заданному указателю на символьный массив, используя один из следующих конструкторов. public String(char* value) public String(char* value, int startIndex, int length)
Первая форма конструктора позволяет создать строку из символов, доступных из массива по указателю value. При этом предполагается, что массив, доступный по указателю value, завершается пустым символом, обозначающим конец строки. А во второй форме конструктора для этой цели из массива, доступного по указателю value, извлекается определенное количество символов (length), начиная с элемента, указываемого по индексу startIndex. В этих конструкторах применяются указатели, поэтому их можно использовать только в небезопасном коде.
И наконец, строку можно построить по заданному указателю на байтовый массив, используя один из следующих конструкторов. public String(sbyte* value) public String(sbyte* value, int startIndex, int length) public String(sbyte* value, int startIndex, int length, Encoding enc)
Первая форма конструктора позволяет построить строку из отдельных байтов сим волов, доступных из массива по указателю value. При этом предполагается, что мас сив, доступный по указателю value, завершается признаком конца строки. Во второй форме конструктора для этой цели из массива, доступного по указателю value, из влекается определенное количество байтов символов (length), начиная с элемента, указываемого по индексу startIndex. А третья форма конструктора позволяет ука зать количество кодируемых байтов. Класс Encoding находится в пространстве имен System.Text. В этих конструкторах применяются указатели, и поэтому их можно ис пользовать только в небезопасном коде.
При объявлении строкового литерала автоматически создается строковый объект. Поэтому для инициализации строкового объекта зачастую оказывается достаточно присвоить ему строковый литерал, как показано ниже. string str = "новая строка"; Поле, индексатор и свойство класса String
В классе String определено единственное поле. public static readonly string Empty
Поле Empty обозначает пустую строку, т.е. такую строку, которая не содержит сим волы. Этим оно отличается от пустой ссылки типа String, которая просто делается на несуществующий объект.
Помимо этого, в классе String определен единственный индексатор, доступный только для чтения. public char this[int index] { get; }