Простые типы данных
Типы данных языка C#
В языке C# нет базовых типов - все типы реализуются как классы библиотеки NET Framework. Однако язык C# имеет набор встроенных типов, которые рассматриваются как псевдонимы типов в пространстве имен System. Например, тип string - это псевдоним типа System.String, а тип int - псевдоним типа System.Int32.
C# поддерживает следующие встроенные типы:
- bool - псевдоним класса System.Boolean ;
- byte - псевдоним класса System.Byte ;
- sbyte - псевдоним класса System.SByte ;
- char - псевдоним класса System.Char ;
- decimal - псевдоним класса System.Decimal ;
- float - псевдоним класса System.Single
- double - псевдоним класса System.Double ;
- int - псевдоним класса System.Int32 ;
- uint - псевдоним класса System.UInt32 ;
- long - псевдоним класса System.Int64 ;
- ulong - псевдоним класса System.UInt64 ;
- object - псевдоним класса System.Object ;
- short - псевдоним класса System.Int16 ;
- ushort - псевдоним класса System.UInt16 ;
- string - псевдоним класса System.String.
Все встроенные типы подразделены на группы:
- целочисленные типы ( int, long, ulong );
- вещественные типы ( float, double );
- логический тип ( bool );
- символьные типы ( char, string );
- объектный тип ( object ).
Иерархия классов NET Framework имеет один общий корень - класс System.Object.
Все типы разделяются на две категории:
- размерные типы ;
- ссылочные типы.
При создании переменной размерного типа под нее в стеке выделяется определенный объем памяти, соответствующий типу этой переменной. При передаче такой переменной в качестве параметра выполняется передача значения, а не ссылки на него. Значение размерного типа не может быть равным null. К размерным типам относятся целочисленные и вещественные типы, структуры, перечислимые типы.
При создании переменной ссылочного типа память под созданный объект выделяется в куче. Ссылка всегда указывает на объект заданного типа.
В языке C# все массивы являются объектами. Базовым классом массива является класс Array пространства имен Systems.
Язык C# позволяет создавать следующие массивы:
- одномерные массивы;
- многомерные массивы;
- невыровненные массивы.
Массивы относятся к ссылочным типам.
Одномерный массив можно создать одним из следующих способов:
- отдельно объявить массив без указания размерности. Например:
int[] myArr1;
- создать уже объявленный массив с одновременной его инициализацией. Например:
myArr1 = new int[] {1, 2, 3, 4};
- отдельно объявить массив с указанием размерности и соответственно созданием объекта. Например:
int[] myArr2 = new int [4];
- объявить массив с одновременной его инициализацией (с указанием оператора new). Например:
int[] myArr3 = new int[] {1, 2, 3, 4}; string[] sColor = new string[] { "Yellow","Blue","Red"};
- объявить массив с одновременной его инициализацией (короткая форма). Например:
int[] myArr4 = {1, 2, 3, 4};
Отметим, что нельзя выполнять инициализацию массива в форме myArray5 = {1, 2}; для предварительно объявленного или уже созданного массива.
При создании многомерных массивов их размерность определяется числом запятых плюс один, указанных в квадратных скобках после типа массива. Формы создания многомерного массива аналогичны формам создания одномерного массива.
Например:
int[,] iArr1 = new int[8,2];
Невыровненный массив реализуется как массив массивов.
Например, массив из трех элементов, каждый из которых содержит двумерный массив, может быть описан следующим образом:
int[][,] iJaggedArr1 = new int [3][,] { new int[,] { {1,1}, {8,8} }, // первый элемент массива new int[,] { {5,5}, {6,6}, {7,7} }, // второй элемент массива new int[,] { {0,0}, {0,0}, {0,0} } // третий элемент массива };
Операторы new должны использоваться для создания каждого массива: первое вхождение оператора new создает одномерный массив, каждый из трех элементов которого также является массивом, а три следующих вхождения оператора new создают элементы как двумерные массивы.
В обычных массивах индексы элементов представляют собой подряд идущие целочисленные значения. Библиотека NET Framework предоставляет класс Collections.Hashtable, позволяющий создавать хэшированные массивы.
Например:
Collections.Hashtable hArr = new Collections.Hashtable(); hArr["i"] = 175; // Значение индекса указывается // типом string