Шрифт:
Помимо описанной выше формы строкового литерала, можно также указать бук вальный строковый литерал. Такой литерал начинается с символа @, после которого следует строка в кавычках. Содержимое строки в кавычках воспринимается без изме нений и может быть расширено до двух и более строк. Это означает, что в буквальный строковый литерал можно включить символы новой строки, табуляции и прочие, не прибегая к управляющим последовательностям. Единственное исключение составля ют двойные кавычки ("), для указания которых необходимо использовать две двой ные кавычки подряд (""). В приведенном ниже примере программы демонстрируется применение буквальных строковых литералов. // Продемонстрировать применение буквальных строковых литералов. 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); } }
Результат выполнения этой программы выглядит следующим образом. Гипотенуза треугольника со сторонами 4 и 5 равна 6.403
В данном примере объявляются три локальные переменные: s1, s2 и hypot. Две из них (s1 и s2) инициализируются константами, А третья (hypot) динамически ини циализируется вычисляемой длиной гипотенузы. Для такой инициализации исполь зуется выражение, указываемое в вызываемом методе Math.Sqrt. Как пояснялось выше, для динамической инициализации пригодно любое выражение, действительное на момент объявления переменной. А поскольку вызов метода Math.Sqrt (или лю бого другого библиотечного метода) является действительным на данный момент, то его можно использовать для инициализации переменной hypot. Следует особо под черкнуть, что в выражении для инициализации можно использовать любой элемент, действительный на момент самой инициализации переменной, в том числе вызовы методов, другие переменные или литералы. Неявно типизированные переменные
Как пояснялось выше, все переменные в C# должны быть объявлены. Как прави ло, при объявлении переменной сначала указывается тип, например int или bool, а затем имя переменной. Но начиная с версии C# 3.0, компилятору предоставляется возможность самому определить тип локальной переменной, исходя из значения, ко торым она инициализируется. Такая переменная называется неявно типизированной. Неявно типизированная переменная объявляется с помощью ключевого слова var и должна быть непременно инициализирована. Для определения типа этой перемен ной компилятору служит тип ее инициализатора, т.е. значения, которым она инициа лизируется. Рассмотрим такой пример. var е = 2.7183;