Простые типы
Переменные
Как упоминалось во введении к этой главе, переменные тесно связаны с хранением данных. Все данные в компьютере фактически представляют собой одно и то же (последовательность, состоящую из нулей и единиц), переменные могут отличаться друг от друга, образуя так называемые типы.Обоснование системы типов заключается в том, что для манипуляций над данными различных типов могут требоваться различные методы, и, приписав переменным конкретные типы, мы можем избежать серьезной путаницы.
Для того чтобы использовать переменную, необходимо ее объявить.Это означает, что ей должны быть присвоены имяи тип.Как только переменная объявлена, она может использоваться как хранилище для данных того типа, который указан в ее объявлении. Синтаксис объявления переменных в С# состоит из указания типа переменной и ее имени:
<тип> <имя>;
Если попытаться использовать переменную, которая не была объявлена, то программа не будет откомпилирована. Однако в этом случае компилятор сможет точно указать, в чем именно заключается проблема, и поэтому такой тип ошибок не очень опасен. Попытка использовать переменную, которой не присвоено никакого значения, тоже приведет к ошибке; в этом случае компилятор также сможет точно установить причину ее возникновения.
Простые типы — это такие типы значений, как численные или логические (true (истина) или false (ложь)), которые являются фундаментальными составными частями любых приложений, а также других, более сложных типов.
Обратите внимание, что каждый тип использует один из стандартных типов, определенных в .NET Framework. Как уже упоминалось в главе 1, применение стандартных типов — это как раз то, что делает возможным совместное использование различных языков программирования. Имена, которые используются для этих типов в С#, обозначают определенные типы, описанные в .NET Framework. В таблице приводятся имена типов и указывается, какому типу в библиотеке .NET Framework они соответствуют.
Тип | Тип .NET Framework | Допустимые значения |
sbyte | System.SByte | Целое в диапазоне от -128 до 127 |
Byte | System.Byte | Целое в диапазоне от 0 до 255 |
short | System.Int16 | Целое в диапазоне от -32 768 до 32 767 |
ushort | System. Uint 16 | Целое в диапазоне от 0 до 65 535 |
int | System.Int32 | Целое в диапазоне от -2 147 483 648 до 2 147 483 647 |
uint | System. Uint 32 | Целое в диапазоне от 0 до 4 294 967 295 |
long | System.Int64 | Целое в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
ulong | System.UInt64 | Целое в диапазоне от 0 до 18 446 744 073 709 551 615 |
Буква "u", встречающаяся перед некоторыми из имен, является сокращением от слова "unsigned" ("без знака"). Это говорит о том, что в переменных соответствующего типа не могут храниться отрицательные значения. Этот факт отражен в столбце "Допустимые значения". Естественно, что кроме целых чисел нам требуется хранить значения с плавающей запятой,которые представляют нецелые числа. Существует три типа переменных с плавающей запятой, которые мы можем использовать: float, double и decimal. Первые два из них хранят числа с плавающей запятой в виде +/-m x 2е, причем диапазон допустимых значений m и е для каждого типа свой. Тип decimal использует альтернативную форму представления чисел +/-m x 10е . Эти три типа приводятся ниже вместе с допустимыми значениями m и е и диапазонами действительных чисел:
Тип | Тип .NET Framework | Минимальное значение m | Максимальное значение m | Минимальное значение е | Максимальное значение е | Приблизительное минимальное число | Приблизительное максимальное число |
float | System.Single | -149 | 1,5 х 10-45 | 3,4 х 1038 | |||
double | System.Double | -1075 | 5,0 х 10-324 | 1,7 х 10308 | |||
decimal | System.Decimal | -26 | 1,0 х 10-28 | 7,9 х 1028 |
Кроме численных типов, существует еще три простых типа:
Тип | Тип .NET Framework | Допустимые значения |
Char | System.Char | Отдельный символ в кодировке Unicode, хранящийся в виде целого числа в диапазоне от 0 до 65 535 |
Bool | System.Bool | Логическое значение (Boolean), которое может принимать значения true (истина) или false (ложь) |
string | System.String | Последовательность символов |
Обратите внимание, что верхней границы количества символов, составляющих строки типа string, не существует, поскольку они могут занимать изменяющиеся объемы памяти. Логический тип bool — один из наиболее часто используемых в С# типов переменной; аналогичные типы часто встречаются в кодах на других языках программирования. Использование переменной, которая может принимать только два значения — либо true, либо false,— создает очень важную возможность ветвления логики приложения. В качестве простого примера представьте себе, какое огромное количество вопросов допускают в качестве ответа true или false ("да" или "нет"). Сравнение значений переменных и проверка допустимости введенной информации как раз представляют собой примеры программного использования логических переменных (эти примеры вскоре станут предметом нашего изучения).
Рассмотрим пример. Создайте новое консольное приложение с именем ch03Ex0i. В директории C:\BegCSharp\Chapter3.
2. Добавьте следующий код в Class1.cs (и уберите строки с комментариями):
static void Main (string [] args)
{
int my Integer;
string myString;
myInteger =17;
myString = "\'' my Integer \ " is";
Console.WriteLine(“{0} {1}.", myString, my Integer);
}
Код, который мы ввели, выполняет три действия:
• Объявляет две переменные.
• Присваивает этим переменным значения.
• Выводит значения этих двух переменных на консоль.
Объявление переменных осуществляет следующий код:
int myInteger;
string myString;
В первой строке объявляется переменная типа int с именем myInteger, а во второй строке объявляется переменная типа string с именем myString.
Запомните, что выбор имен для переменных имеет свои ограничения и нельзя использовать любую произвольную последовательность символов.
В следующих двух строках кода происходит присваивание значений
myInteger =17;
myString = "\'' my Integer \ " is";
В данном случае происходит присваивание переменным двух фиксированных значений. Мы присваиваем целое значение 17 переменной myInteger, а строку "myInteger” is (включая кавычки) переменной mystring. Обратите внимание, что когда мы присваиваем строковые литеральные значения таким способом, строка должна обрамляться двойными кавычками. При этом существуют определенные символы (например, символ двойных кавычек), включение которых в строку может привести к возникновению некоторых проблем; поэтому необходимо избегать появления ряда символов путем их замены на некоторую последовательность символов (так называемую escape-последовательность),которая обозначает символ, который нам нужен. В данном примере мы используем последовательность символов \” для того, чтобы избежать появления двойных кавычек внутри переменной: myString = "\'' my Integer \ " is".
Здесь необходимо обратить внимание на то, что присваивание литеральных строк — это еще одна ситуация, при которой необходимо соблюдать аккуратность в использовании символов конца строки: компилятор С# не воспринимает литеральные строки, располагающиеся более чем на одной строке программы. Если нам требуется включить в строку символ конца строки, то в этом случае мы можем воспользоваться escape-последовательностью для символа возврат каретки \n.
Пример, полученная в результате следующего присваивания строка:
myString = “Данная строка содержит \n символ конца строки.”;
будет выводиться на консоли в виде двух строк: