Система типов поддерживает две категории типов, каждая из которых разделена на подкатегории: типы значений (типы-значения) и ссылочные типы (типы-ссылки).
Схема типов представлена ниже.
Все типы, за исключением простых типов, могут определяться программистом. Все остальные типы (производные типы) требуют предварительного объявления.
Простые (элементарные) типы – это типы, имя и основные свойства которых известны компилятору. Относительно встроенных типов компилятору не требуется никакой дополнительной информации. Он поддерживает эти типы самостоятельно.
Среди простых типов различаются:
§ ЦЕЛОЧИСЛЕННЫЕ,
§ С ПЛАВАЮЩЕЙ ТОЧКОЙ,
§ DECIMAL,
§ БУЛЕВСКИЙ.
Для обозначения простых (элементарных) типов в C# используется следующая система обозначений. Некоторые характеристики типов отражены в следующей таблице. Смысл точечной нотации в графе “Соответствует FCL-типу” будет разъяснён позже. Пока эту нотацию достаточно воспринимать как составное имя:
Имя типа в C#
Соответствует FCL-типу
Описание
sbyte
System.SByte
Целый. 8-разрядное со знаком. Диапазон значений: 128 … 127
byte
System.Byte
Целый. 8-разрядное без знака. Диапазон значений: 0 … 255
short
System.Int16
Целый. 16-разрядное со знаком. Диапазон значений: -32768 … 32767
ushort
System.UInt16
Целый. 16-разрядное без знака. Диапазон значений: 0 … 65535
int
System.Int32
Целый. 32-разрядное со знаком. Диапазон значений: -2147483648 … 2147483647
uint
System.UInt32
Целый. 32-разрядное без знака. Диапазон значений: -0 … 4294967295
long
System.Int64
Целый. 64-разрядное со знаком. Диапазон значений: -9223372036854775808 … 9223372036854775807
ulong
System.UInt64
Целый. 64-разрядное без знака. Диапазон значений: 0 … 18446744073709551615
char
System.Char
16 (!) разрядный символ UNICODE.
float
System.Single
Плавающий. 32 разряда. Стандарт IEEE.
double
System.Double
Плавающий. 64 разряда. Стандарт IEEE.
decimal
System.Decimal
128-разрядное значение повышенной точности с плавающей точкой.
bool
System.Boolean
Значение true или false.
При создании объекта элементарного типа производится его начальная инициализация предопределённым значением. И за это отвечают предопределённые недоступные для модификации конструкторы.
В C# различаются ВСТРОЕННЫЕ (элементарные - primitive, предопределённые – predefined) и ПРОИЗВОДНЫЕ типы.
Встроенные типы – это типы, имя и основные свойства которых известны компилятору. Производные типы требуют предварительного объявления. Относительно встроенных типов компилятору не требуется никакой дополнительной информации. Он поддерживает эти типы самостоятельно.
В разных CLS-языках типам, удовлетворяющим CLS спецификации, будут соответствовать одни и те же элементарные типы. Согласованная поддержка типов, НЕ соответствующих CLS спецификации, в разных языках не гарантируется.
Система встроенных типов C# основывается на системе типов .NET Framework Class Library. При создании IL кода компилятор осуществляет их отображение в типы из .NET FCL.
Ниже представлены основные отличия ссылочных типов и типов-значений.
Типы-значения
Типы-ссылки
Объект содержит
значение
ссылку
Располагается
в стеке
в динамической памяти
Значение по умолчанию
0, false, ‘\0’
null
При присваивании копируется
значение
ссылка
В C# объявление любой структуры и класса основывается на объявлении предопределённого класса Object (наследует класс Object). Следствием этого является возможность вызова от имени объектов-представителей любой структуры или класса унаследованных от класса Object методов. В частности, метода ToString. Этот метод возвращает строковое (значение типа string) представление объекта.
В C# также существует ещё одно важное ограничение на использование объектов размерных типов. Необходимым условием применения этих объектов является их ЯВНАЯ инициализация.