Простые типы

Переменные

Как упоминалось во введении к этой главе, переменные тесно связаны с хранением данных. Все данные в компьютере фактически представляют собой одно и то же (последовательность, состоящую из нулей и единиц), переменные могут отличаться друг от друга, образуя так называемые типы.Обоснование системы типов заключается в том, что для манипуляций над данными различных типов могут требоваться различные методы, и, приписав переменным конкретные типы, мы можем избежать серьезной путаницы.

Для того чтобы использовать переменную, необходимо ее объявить.Это означает, что ей должны быть присвоены имяи тип.Как только переменная объявлена, она может использоваться как хранилище для данных того типа, который указан в ее объявлении. Синтаксис объявления переменных в С# состоит из указания типа переменной и ее имени:

<тип> <имя>;

Если попытаться использовать переменную, которая не была объявлена, то программа не будет откомпилирована. Однако в этом случае компилятор сможет точно указать, в чем именно заключается проблема, и поэтому такой тип ошибок не очень опасен. Попытка использовать переменную, которой не присвоено никакого значения, тоже приведет к ошибке; в этом случае компилятор также сможет точно установить причину ее возникновения.

Простые типы — это такие типы значений, как численные или логические (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 символ конца строки.”;

будет выводиться на консоли в виде двух строк: