Для каждого типа данных C# существует соответствующий тип данных в CRL (Common Language Runtime).
Подробности CRL см. в уроке 2. Это, в
частности, означает, что каждый тип имеет два названия - полный (из CLR, его можно использовать в любом
языке .NET) и сокращенный, который используется в C#. Что за название использовать - это дело вкуса. Но
короткие названия во-первых, короче, и во-вторых, как-то привычнее, так что мы в наших уроках будем
использовать короткие названия C#. На этом же уроке мы приведем как полные названия (из CLR), так и
краткие.
Основные типы данных перечислены в следующей таблице:
Тип C#
Тип CLR
Размер в байтах
Пояснение
int
Int32
4
Целое (со знаком)
float
Single
4
Вещественное число
char
Char
-
Символ (Unicode)
bool
Boolean
-
Логический тип
short
Int16
2
Короткое целое (со знаком)
long
Int64
8
Длинное целое (со знаком)
string
String
-
строка
byte
Byte
1
байт
decimal
Decimal
8
Вещественное число фиксированной точности
Если вы предпочитаете использовать длинные имена, то вы должны писать что-то вроде System.Int32 для
типа int и т. п. (т. е. приписывать слово System перед CLR-именем). Или же вы должны добавить строчку
using System;
в начале программы (хотя, впрочем, она там скорей всего и так есть).
Таким образом следующие три объявления переменной k равносильны:
int k;
using System;
...
Int32 k;
и
System.Int32 k;
Разумеется, аналогично мы имеем дело и другими типами языка C#.
Объявление переменной можно совместить с инициализацией (заданием начального значения):
int z=88;
Набор операторов для C# достаточно стандартен + , -, *, / - действуют как и в любом другом языке.
Отметим только, что / (деление) применительно к целым числам дает целую часть от деления. Так,
фрагмент
int k=100999, n=1000, s;
s=k/n;
Console.WriteLine(s.ToString());
выведет на экран 100, а не 101, т. е. никакого округления не происходит.
Есть еще один оператор - %. Это - остаток от деления. Следующий фрагмент выведет на экран 999:
int k=100999, n=1000, s;
s=k%n;
Console.WriteLine(s.ToString());
Как и в других C-подобных языках, в C# существуют операторы инкремента и декремента. Так, после
следующего фрагмента k увеличится на 1, а n - уменьшится на 1:
Как и в других C-подобных языках, в C# существуют следующие логические операторы:
Оператор
Описание
Пример
&&
Логическое И. Результат равен true, только если оба операнда равны true
(x==8) && (y==5)
||
Логическое ИЛИ. Результат равен false, только если оба операнда равны false
(y>8) || (y<5)
!
Отрицание. Изменяет логическое значение на противоположное
if(!(a==b))...
Все эти операторы возвращают результат типа bool.
Обратите внимание, что для логического равно (т. е. для ответа на вопрос "Верно ли, что что-то равно
чему-то") используется знак двойного равенства (==). Знак же одинарного равенства (=) используется для
присваивания. Для знака == существует парный знак != ("не равно"). Так, приведенный выше пример для
оператора ! можно переписать так:
if(!(a==b))...
Отметим, что в C#, в отличии от многих других языков программирования, нельзя вместо false использовать
0, а вместо true - любое ненулевое число. Так, следующий фрагмент содержит ошибку:
Массивы в C# несколько отличаются от других C-подобных языков. Начнем сразу с примеров. Пример
первый:
...
int[] k; //k - массив
k=new int [3]; //Определяем массив из 3-х целых
k[0]=-5; k[1]=4; k[2]=55; //Задаем элементы массива//Выводим третий элемент массива
Console.WriteLine(k[2].ToString());
...
Смысл приведенного фрагмента ясен из комментариев. Обратите внимание на некоторые особенности.
Во-первых, массив определяется именно как
int[] k;
а не как один из следующих вариантов:
int k[]; //Неверно!
int k[3]; //Неверно!
int[3] k; //Неверно!
Во-вторых, так как массив представляет из себя ссылочный объект, то для создания массива необходима
строка
k=new int [3];
Именно в ней мы и определяем размер массива. Хотя, вообще говоря, как и в C/C++ возможны конструкции
вида
int[] k = new int [3];
Элементы массива можно задавать сразу при объявлении. Вот пример:
int[] k = {-5, 4, 55};
Разумеется, приведенные конструкции применимы не только к типу int и не только к массиву размера 3.
В C#, как и в C/C++, нумерация элементов массива идет с нуля. Таким образом в нашем примере начальный
элемент массива - это k[0], а последний - k[2]. Элемента k[3], разумеется, нет.
Теперь переходим к многомерным массивам. Вот так задается двумерный массив:
int[,] k = new int [2,3];
Обратите внимение, что пара квадратных скобок только одна. Естественно, что в нашем примере у массива 6
(=2*3) элементов (k[0,0] - первый, k[1,2] - последний).
Аналогично мы можем задавать многомерные массивы. Вот пример трехмерного массива:
int[,,] k = new int [10,10,10];
А вот так можно сразу инициализировать многомерные массивы:
int[,] k = {{2,-2},{3,-22},{0,4}};
Приведенные выше примеры многомерных массивов называются прямоугольными. Если их представить в виде
таблицы (в двумерном случае), то массив будет представлять из себя прямоугольник.
Наряду с прямоугольными массивами существуют так называемые ступенчатые. Вот пример:
//Объявляем 2-мерный ступенчатый массив
int[][] k = new int [2][];
//Объявляем 0-й элемент нашего ступенчатого массива
//Это опять массив и в нем 3 элемента
k[0]=new int[3];
//Объявляем 1-й элемент нашего ступенчатого массива
//Это опять массив и в нем 4 элемента
k[1]=new int[4];
k[1][3]=22; //записываем 22 в последний элемент массива
...
Обратите внимание, что у ступенчатых массивов мы задаем несколько пар квадратных скобок (столько,
сколько размерность у массива). И точно так же мы что-нибудь делаем с элементами массива - записываем,
читаем и т. п.
Самая важная и интересная возможность у ступенчатых массивов - это их "непрямоугольность".
Так, в приведенном выше примере в первой "строке" массива k три целых числа, а во второй -
четыре. Часто это оказывается очень к месту.