Полное руководство. С# 4.0
Шрифт:
Большинство печатаемых символов достаточно заключить в одинарные кавычки, но набор в текстовом редакторе некоторых символов, например возврата каретки, вы зывает особые трудности. Кроме того, ряд других символов, в том числе одинарные и двойные кавычки, имеют специальное назначение в С#, поэтому их нельзя исполь зовать непосредственно. По этим причинам в C# предусмотрены специальные управ ляющие последовательности символов, иногда еще называемые константами с обратной косой чертой (табл. 3.2). Такие последовательности применяются вместо тех символов, которых они представляют.
Таблица 3.2. Управляющие последовательности символов Управляющая последовательность Описание \a Звуковой сигнал (звонок) \b
Например, в следующей строке кода переменной ch присваивается символ табу ляции. ch = '\t';
А в приведенном ниже примере кода переменной ch присваивается символ оди нарной кавычки. ch = '\''; Строковые литералы
В С# поддерживается еще один тип литералов — строковый. Строковый литерал представляет собой набор символов, заключенных в двойные кавычки. Например сле дующий фрагмент кода: "это тест"
представляет собой текстовую строку. Образцы подобных строк не раз встречались в приведенных выше примерах программ.
Помимо обычных символов, строковый литерал может содержать одну или не сколько управляющих последовательностей символов, о которых речь шла выше. Рас смотрим для примера программу, в которой используются управляющие последова тельности \n и \t. // Продемонстрировать применение управляющих // последовательностей символов в строковых литералах. using System; class StrDemo { static void Main { Console.WriteLine("Первая строка\nВторая строка\nТретья строка"); Console.WriteLine("Один\tДва\tТри"); Console.WriteLine("Четыре\tПять\tШесть"); // Вставить кавычки. Console.WriteLine("\"3ачем?\", спросил он."); } }
Результат выполнения этой программы приведен ниже. Первая строка Вторая строка Третья строка Один Два Три Четыре Пять Шесть "Зачем?", спросил он.
В приведенном выше примере программы обратите внимание на то, что для пере хода на новую строку используется управляющая последовательность \n. Для выво да нескольких строк совсем не обязательно вызывать метод WriteLine несколько раз — достаточно вставить управляющую последовательность \n в тех местах удли ненной текстовой строки (или строкового литерала), где должен происходить переход на новую строку. Обратите также внимание на то, как в текстовой строке формируется знак кавычек.
Помимо описанной выше формы строкового литерала, можно также указать бук вальный строковый литерал. Такой литерал начинается с символа @, после которого следует строка в кавычках. Содержимое строки в кавычках воспринимается без изме нений и может быть расширено до двух и более строк. Это означает, что в буквальный строковый литерал можно включить символы новой строки, табуляции и прочие, не прибегая к управляющим последовательностям. Единственное исключение составля ют двойные кавычки ("), для указания которых необходимо использовать две двой ные кавычки подряд (""). В приведенном ниже примере программы демонстрируется применение буквальных строковых литералов. // Продемонстрировать применение буквальных строковых литералов. using System; class Verbatim { static void Main { Console.WriteLine(@"Это буквальный строковый литерал, занимающий несколько строк. "); Console.WriteLine(@"А это вывод с табуляцией: 1 2 3 4 5 6 7 8 "); Console.WriteLine(@"Отзыв программиста: ""Мне нравится С#."""); } }
Результат выполнения этой программы приведен ниже. Это буквальный строковый литерал, занимающий несколько строк. А это вывод с табуляцией: 1 2 3 4 5 6 7 8 Отзыв программиста: "Мне нравится С#."
Следует особо подчеркнуть, что буквальные строковые литералы выводятся в том же виде, в каком они введены в исходном тексте программы.
Преимущество буквальных строковых литералов заключается в том, что они позво ляют указать в программе выводимый результат именно так, как он должен выглядеть на экране. Но если выводится несколько строк, то переход на новую строку может на рушить порядок набора исходного текста программы с отступами. Именно по этой причине в примерах программ, приведенных в этой книге, применение буквальных строковых литералов ограничено. Тем не менее они приносят немало замечательных выгод во многих случаях, когда требуется форматирование выводимых результатов.
И последнее замечание: не путайте строки с символами. Символьный литерал, на пример 'X', обозначает одиночную букву типа char. А строка, состоящая из одного символа, например "X", по-прежнему остается текстовой строкой. Более подробное рассмотрение переменных
Переменные объявляются с помощью оператора следующей формы: тип имя_переменной;
где тип — это тип данных, хранящихся в переменной; а имя_переменной — это ее имя. Объявить можно переменную любого действительного типа, в том числе и опи санных выше типов значений. Важно подчеркнуть, что возможности переменной опре деляются ее типом. Например, переменную типа bool нельзя использовать для хра нения числовых значений с плавающей точкой. Кроме того, тип переменной нельзя изменять в течение срока ее существования. В частности, переменную типа int нельзя преобразовать в переменную типа char.
Все переменные в C# должны быть объявлены до их применения. Это нужно для того, чтобы уведомить компилятор о типе данных, хранящихся в переменной, прежде чем он попытается правильно скомпилировать любой оператор, в котором использу ется переменная. Это позволяет также осуществлять строгий контроль типов в С#. В С# определено несколько различных видов переменных. Так, в предыдущих при мерах программ использовались переменные, называемые локальными, поскольку они объявляются внутри метода. Инициализация переменной
Задать значение переменной можно, в частности, с помощью оператора присваи вания, как было не раз продемонстрировано ранее. Кроме того, задать начальное зна чение переменной можно при ее объявлении. Для этого после имени переменной ука зывается знак равенства (=) и присваиваемое значение. Ниже приведена общая форма инициализации переменной: тип имя_переменной = значение;
где значение — это конкретное значение, задаваемое при создании переменной. Оно должно соответствовать указанному типу переменной. Ниже приведены некоторые примеры инициализации переменных. int count = 10; // задать начальное значение 10 переменной count. char ch = 'X'; // инициализировать переменную ch буквенным значением X. float f = 1.2F // переменная f инициализируется числовым значением 1,2.
Если две или более переменные одного и того же типа объявляются списком, разде ляемым запятыми, то этим переменным можно задать, например, начальное значение. int а, b =8, с = 19, d; // инициализировать переменные b и с
В данном примере инициализируются только переменные b и с. Динамическая инициализация
В приведенных выше примерах в качестве инициализаторов переменных исполь зовались только константы, но в C# допускается также динамическая инициализация переменных с помощью любого выражения, действительного на момент объявления переменной. Ниже приведен пример краткой программы для вычисления гипотенузы прямоугольного треугольника по длине его противоположных сторон. // Продемонстрировать динамическую инициализацию. using System; class DynInit { static void Main { // Длина сторон прямоугольного треугольника, double s1 = 4.0; double s2 = 5.0; // Инициализировать переменную hypot динамически, double hypot = Math.Sqrt( (s1 * s1) + (s2 * s2) ); Console.Write("Гипотенуза треугольника со сторонами " + s1 + " и " + s2 + " равна "); Console.WriteLine("{0:#.###}.", hypot); } }