Типы данных в C#
Типы значений
Типы структур
Пользовательские типы в формате [struct <название> {...}]
представляет структуру с данными-членами и функциями-членами. Но в отличие от классов, структуры являются типами значений и обычно не требуют выделения памяти из кучи. Типы структуры не поддерживают определяемое пользователем наследование, и все типы структуры неявно наследуют от типа object.
Типы перечисления
Пользовательские типы в формате enum E {...}
Каждый тип [enum] имеет базовый тип, в роли которого выступает одним из восьми целочисленных типов. Набор значений типа [enum] аналогичен набору значений его базового типа.
Отдельный тип со списком именованных констант
Типы значений, допускающие значение NULL
Расширения других типов значений, допускающие значение null
Типы значений, допускающие значение Null, не нужно отдельно объявлять перед использованием. Для каждого обычного типа значений <тип>, который не допускает значение Null, существует идентичный тип <тип>?, который отличается только тем, что может содержать значение null. Например int? — это тип, который может содержать любое 32-разрядное целое число или значение null.
Простые типы
Символы Юникода
char: хранит одиночный символ в кодировке Unicode и занимает 2 байта. Представлен системным типом System.Char. Этому типу соответствуют символьные литералы
IEEE-представление с плавающей запятой
поfloat: хранит число с плавающей точкой от -3.4*1038 до 3.4*1038 и занимает 4 байта. Представлен системным типом System.Singleдтема
double: хранит число с плавающей точкой от ±5.0*10-324 до ±1.7*10308 и занимает 8 байта. Представлен системным типом System.Double
Десятичный с повышенной точностью
decimal: хранит десятичное дробное число. Если употребляется без десятичной запятой, имеет значение от 0 до +/–79 228 162 514 264 337 593 543 950 335; если с запятой, то от 0 до +/–7,9228162514264337593543950335 с 28 разрядами после запятой и занимает 16 байт. Представлен системным типом System.Decimal
Тип данных для финансовых и денежных расчетов
Логическое значение
bool: хранит значение true или false (логические литералы). Представлен системным типом System.Boolean
используется для представления логических значений, которые могут иметь значение <true> или <false>
Целочисленный со знаком
sbyte
8 бит, в диапазоне от –128 до 127
short
16 бит, в диапазоне от –32 768 до 32 767
int
32 бита, в диапазоне от –2 147 483 648 до 2 147 483 647
long
64 бита, в диапазоне от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
Целочисленный без знака
uint
32 бита, в диапазоне от 0 до 4 294 967 295
ushort
16 бит, в диапазоне от 0 до 65 535
byte
8 бит, в диапазоне от 0 до 255
представляет элемент в кодировке UTF-16
ushort
16 бит, в диапазоне от 0 до 65 535
Ссылочные типы
Типы объектов
Массивы
Одномерные
int[]
Многомерные
int[,]
Типы массивов не требуется объявлять перед использованием.
Например, int[] является одномерным массивом значений типа int, а int[,] — двумерным массивом значений типа int, тогда как int[][] представляет собой одномерный массив одномерных массивов значений типа int.
Типы массивов можно сформировать, просто введя квадратные скобки после имени типа
Классы
определяет структуру данных, которая содержит данные-члены (поля) и функции-члены (методы, свойства и т. д.). Классы поддерживают механизмы одиночного наследования и полиморфизма, которые позволяют создавать производные классы, расширяющие и уточняющие определения базовых классов.
Пользовательские типы в формате [class <название класса> {...}]
Строки Юникода
string: хранит набор символов Unicode. Представлен системным типом System.String. Этому типу соответствуют символьные литералы.
представляет последовательность элементов в кодировке UTF-16
Исходный базовый класс для всех типов - [object]
Интерфейсы
Пользовательские типы в формате interface I {...}
Тип interface (интерфейс) определяет контракт в виде именованного набора открытых функций-членов. Объект типа class или struct, реализующий interface, должен предоставить реализации для всех функций-членов интерфейса.
Тип interface может наследовать от нескольких базовых интерфейсов, а class или struct могут реализовывать несколько интерфейсов.
Делегаты
Представляют ссылки на методы с конкретным списком параметров и типом возвращаемого значения
Пользовательские типы в формате delegate int D(...)
Делегаты позволяют использовать методы как сущности, сохраняя их в переменные и передавая в качестве параметров. Делегаты аналогичны типам функций, которые используются в функциональных языках. Также принцип их работы близок к указателям функций из некоторых языков, но в отличие от указателей функций делегаты являются объектно-ориентированными и строго типизированными.