Книга: C# 4.0: полное руководство
Литералы
Разделы на этой странице:
Литералы
В C# литералами называются постоянные значения, представленные в удобной для восприятия форме. Например, число 100 является литералом. Сами литералы и их назначение настолько понятны, что они применялись во всех предыдущих примерах программ без всяких пояснений. Но теперь настало время дать им формальное объяснение.
В C# литералы могут быть любого простого типа. Представление каждого литерала зависит от конкретного типа. Как пояснялось ранее, символьные литералы заключаются в одинарные кавычки. Например, 'а' и '%' являются символьными литералами.
Целочисленные литералы указываются в виде чисел без дробной части. Например, 10 и -100 — это целочисленные литералы. Для обозначения литералов с плавающей точкой требуется указывать десятичную точку и дробную часть числа. Например, 11.123 — это литерал с плавающей точкой. Для вещественных чисел с плавающей точкой в C# допускается также использовать экспоненциальное представление.
У литералов должен быть также конкретный тип, поскольку C# является строго типизированным языком. В этой связи возникает естественный вопрос: к какому типу следует отнести числовой литерал, например 2,123987 или 0.23? К счастью, для ответа на этот вопрос в C# установлен ряд простых для соблюдения правил.
Во-первых, у целочисленных литералов должен быть самый мелкий целочисленный тип, которым они могут быть представлены, начиная с типа int. Таким образом, у целочисленных литералов может быть один из следующих типов: int, uint, long
или ulong
в зависимости от значения литерала. И во-вторых, литералы с плавающей точкой относятся к типу double
.
Если вас не устраивает используемый по умолчанию тип литерала, вы можете явно указать другой его тип с помощью суффикса. Так, для указания типа long
к литералу присоединяется суффикс l или L. Например, 12 — это литерал типа int
, a 12L — литерал типа long
. Для указания целочисленного типа без знака к литералу присоединяется суффикс u или U. Следовательно, 100 — это литерал типа int
, a 100U — литерал типа uint
. А для указания длинного целочисленного типа без знака к литералу присоединяется суффикс ul или UL. Например, 984375UL — это литерал типа ulong
.
Кроме того, для указания типа float
к литералу присоединяется суффикс F или f. Например, 10.19F — это литерал типа float
. Можете даже указать тип double
, присоединив к литералу суффикс d или D, хотя это излишне. Ведь, как упоминалось выше, по умолчанию литералы с плавающей точкой относятся к типу double
.
И наконец, для указания типа decimal
к литералу присоединяется суффикс m или М. Например, 9.95М — это десятичный литерал типа decimal
.
Несмотря на то что целочисленные литералы образуют по умолчанию значения типа int, uint, long или ulong, их можно присваивать переменным типа byte, sbyte, short
или ushort
, при условии, что присваиваемое значение может быть представлено целевым типом.
Шестнадцатеричные литералы
Вам, вероятно, известно, что в программировании иногда оказывается проще пользоваться системой счисления по основанию 16, чем по основанию 10. Система счисления по основанию 16 называется шестнадцатеричной. В ней используются числа от 0 до 9, а также буквы от А до F, которыми обозначаются десятичные числа 10,11,12,13, 14 и 15. Например, десятичному числу 16 соответствует шестнадцатеричное число 10. Вследствие того что шестнадцатеричные числа применяются в программировании довольно часто, в C# разрешается указывать целочисленные литералы в шестнадцатеричном формате. Шестнадцатеричные литералы должны начинаться с символов Ох, т.е. нуля и последующей латинской буквы "икс". Ниже приведены некоторые примеры шестнадцатеричных литералов.
count = OxFF; // 255 в десятичной системе
incr = 0x1а; // 26 в десятичной системе
Управляющие последовательности символов
Большинство печатаемых символов достаточно заключить в одинарные кавычки, но набор в текстовом редакторе некоторых символов, например возврата каретки, вызывает особые трудности. Кроме того, ряд других символов, в том числе одинарные и двойные кавычки, имеют специальное назначение в С#, поэтому их нельзя использовать непосредственно. По этим причинам в C# предусмотрены специальные управляющие последовательности символов, иногда еще называемые константами с обратной косой чертой (табл. 3.2). Такие последовательности применяются вместо тех символов, которых они представляют.
Таблица 3.2. Управляющие последовательности символов
Управляющая
последователь-
ность Описание
a Звуковой сигнал (звонок)
b Возврат на одну позицию
f Перевод страницы (переход на новую страницу)
n Новая строка (перевод строки)
r Возврат каретки
t Горизонтальная табуляция
v Вертикальная табуляция
Пустой символ
' Одинарная кавычка
" Двойная кавычка
Обратная косая черта
Например, в следующей строке кода переменной ch присваивается символ табуляции.
ch = 't';
А в приведенном ниже примере кода переменной ch присваивается символ одинарной кавычки.
ch = ''';
Строковые литералы
В C# поддерживается еще один тип литералов — строковый. Строковый литерал представляет собой набор символов, заключенных в двойные кавычки. Например следующий фрагмент кода:
"это тест"
представляет собой текстовую строку. Образцы подобных строк не раз встречались в приведенных выше примерах программ.
Помимо обычных символов, строковый литерал может содержать одну или несколько управляющих последовательностей символов, о которых речь шла выше. Рассмотрим для примера программу, в которой используются управляющие последовательности 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", по-прежнему остается текстовой строкой.
- О значении типов данных
- Типы значений в C#
- Целочисленные типы
- Типы для представления чисел с плавающей точкой
- Десятичный тип данных
- Символы
- Логический тип данных
- Некоторые возможности вывода
- Литералы
- Более подробное рассмотрение переменных
- Область действия и время существования переменных
- Преобразование и приведение типов
- Преобразование типов в выражениях
- 2.3. Литералы
- A2.6. Строковые литералы
- 3.1.1. Целые литералы
- 3.1.2. Литералы вещественных чисел
- 3.2.1. Строковые литералы
- 6.1.1. Литералы объектов
- ГЛАВА 3 Типы данных, литералы и переменные
- Литералы месяца
- Предварительно определенные литералы даты
- Вставка недопустимых символов. Литералы
- Лекция 2. Литералы и скалярные данные
- Предопределенные литералы даты