Типы данных в C#

Типы данных в C#

a

Типы значений

Типы структур

Пользовательские типы в формате [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(...)

Делегаты позволяют использовать методы как сущности, сохраняя их в переменные и передавая в качестве параметров. Делегаты аналогичны типам функций, которые используются в функциональных языках. Также принцип их работы близок к указателям функций из некоторых языков, но в отличие от указателей функций делегаты являются объектно-ориентированными и строго типизированными.

К типам значений относятся большинство встроенных типовC# и типы (в том числе и пользовательские), созданные с применением ключевого слова struct (т.е. так называемые структуры).

Две переменные ссылочного типа могут ссылаться на один и тот же объект, поэтому может случиться так, что операции над одной переменной затронут объект, на который ссылается другая переменная.