Типы данных в C#: типы значений, ссылочные типы и указатели
Переменные в C# делятся на три категории:
- Типы значений (Value types)
- Ссылочные типы (Reference types)
- Типы-указатели (Pointer types)
Типы значений
Напрямую содержат данные. Производны от System.ValueType. Примеры: int, char, float. При объявлении выделяется память под значение.
| Тип | Представляет | Диапазон | Значение по умолчанию |
|---|---|---|---|
| bool | Логическое значение | true/false | false |
| byte | 8-бит беззнаковое | 0–255 | 0 |
| char | 16-бит Unicode | U+0000–U+FFFF | '\0' |
| decimal | 128-бит точное десятичное (28-29 знаков) | (±7.9×10²⁸)/10⁰⁻²⁸ | 0.0M |
| double | 64-бит double precision | ±5.0×10⁻³²⁴ – ±1.7×10³⁰⁸ | 0.0D |
| float | 32-бит single precision | ±3.4×10³⁸ | 0.0F |
| int | 32-бит знаковое | -2,147,483,648 – 2,147,483,647 | 0 |
| long | 64-бит знаковое | ±9.22×10¹⁸ | 0L |
| sbyte | 8-бит знаковое | -128–127 | 0 |
| short | 16-бит знаковое | -32,768–32,767 | 0 |
| uint | 32-бит беззнаковое | 0–4,294,967,295 | 0 |
| ulong | 64-бит беззнаковое | 0–1.84×10¹⁹ | 0 |
| ushort | 16-бит беззнаковое | 0–65,535 | 0 |
Размер типа на конкретной платформе: sizeof(type) (в байтах).
Console.WriteLine("Size of int: {0}", sizeof(int)); // 4
Ссылочные типы
Не содержат данные напрямую, а хранят ссылку (адрес) на данные в памяти. Несколько переменных могут ссылаться на один объект — изменение через одну видно через другие.
Встроенные ссылочные типы: object, dynamic, string.
Тип object
Базовый класс для всех типов (CTS). Псевдоним System.Object. Может принимать значение любого типа после преобразования.
- Упаковка (boxing): тип значения → object
- Распаковка (unboxing): object → тип значения
object obj; obj = 100; // boxing
Тип dynamic
Хранит любое значение. Проверка типов — во время выполнения (runtime).
dynamic d = 20;
Отличие от object: у object проверка на этапе компиляции.
Тип string
Псевдоним System.String, производен от object. Литералы: в кавычках "text" или verbatim @"text" (без экранирования).
String str = "Tutorials Point"; string verbatim = @"Tutorials Point";
Пользовательские ссылочные типы: class, interface, delegate (рассматриваются позже).
Типы-указатели (Pointer types)
Хранят адрес памяти другого типа. Возможности как в C/C++.
type* identifier;
Примеры
char* cptr; int* iptr;
Используются в unsafe контексте (см. главу "Unsafe Codes").
Язык C
- Четыре ключевых типа шлицевых приводов крепежей: подробный разбор
- Термопары: типы, диапазоны и сравнение характеристик
- Мастерство C# переменных и примитивных типов данных: полное руководство
- Освоение преобразования типов в C#: неявное, явное, Parse и Convert
- Понимание типов данных C++: основы, модификаторы и лучшие практики
- Типы данных в C: int, float, char и другие — полное руководство
- Освоение типов данных в Python: практическое руководство
- Мастерство преобразования типов в Python: Полное руководство
- Примитивные типы данных в Java: полное руководство с примерами
- Освоение приведения типов в Java: от расширения к сужению и далее