Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


8.3.2. Строковые константы

В C# существуют два вида строковых констант:

- обычные константы, которые представляют строку символов, заключенную в кавычки;

- @-константы, заданные обычной константой с предшествующим знаком @.

В обычных константах некоторые символы интерпретируются особым образом. Связано это прежде всего с тем, что необходимо уметь задавать в строке непечатаемые символы, такие, как, например, символ табуляции. Возникает необходимость задавать символы их кодом - в виде escape- последовательностей. Для всех этих целей используется комбинация символов, начинающаяся символом "\" - обратная косая черта. Так, пары символов: "\n", "\t", "\\", "\"" задают соответственно символ перехода на новую строку, символ табуляции, сам символ обратной косой черты, символ кавычки, вставляемый в строку, но не сигнализирующий о ее окончании. Комбинация "\xNNNN" задает символ, определяемый шестнадцатеричным кодом NNNN. Хотя такое решение возникающих проблем совершенно естественно, иногда возникают неудобства. Например, при задании констант, определяющих путь к файлу, приходится каждый раз удваивать символ обратной косой черты. Это одна из причин, по которой появились @-константы.

В @-константах все символы трактуются в полном соответствии с их изображением. Поэтому путь к файлу лучше задавать @-константой. Единственная проблема в таких случаях: как задать символ кавычки, чтобы он не воспринимался как конец самой константы. Решением является удвоение символа. Вот соответствующие примеры:

//Два вида констант
s1 = "\x50";
s2 = @"\x50”””;
b1 = (s1==s2);
Console.WriteLine("s1={0}, s2={1}, b1={2}", s1, s2, b1);
s1 = "c:\\c#book\\ch5\\chapter5.doc";
s2 = @"c:\c#book\ch5\chapter5.doc";
b1= (s1==s2);
Console.WriteLine("s1={0}, s2={1}, b1={2}", s1,s2,b1);
s1= "\"A\"";
s2=@””A...... “”;
b1= (s1==s2);
Console.WriteLine("s1={0}, s2={1}, b1={2}", s1, s2, b1);

Результаты работы приведенных фрагментов кода, полученные при вызове процедур TestDeclStrings и TestOpers приведены на рисунке 29.

Рисунок 29. Объявления, константы и операции над объектами string

Неизменяемый класс String

В языке C# существует понятие неизменяемый (immutable) класс. Для такого класса невозможно изменить значение объекта при вызове его методов. Динамические методы могут создавать новый объект, но не могут изменить значение существующего объекта.

К таким неизменяемым классам относится и класс String. Ни один из методов этого класса не меняет значения существующих объектов. Конечно, некоторые из методов создают новые значения и возвращают в качестве результата новые строки. Невозможность изменять значения строк касается не только методов. Аналогично, при работе со строкой как с массивом разрешено только чтение отдельных символов, но не их замена. Оператор присваивания, в котором делается попытка изменить первый символ строки, недопустим, а потому закомментирован.

//Неизменяемые значения
         s1= "Zenon"; ch1 = s1[0];
//s1[0]='L';

 



<< ПредыдущаяОглавлениеСледующая >>