Какие базовые (встроенные) типы данных вы знаете в .NET (C#)?

Ответ

В C# существует набор встроенных (простых) типов значений, которые являются основой для построения более сложных структур. Они определены в пространстве имен System и имеют соответствующие ключевые слова-алиасы в C#.

Основные категории встроенных типов:

  • Целочисленные (со знаком): sbyte (System.SByte), short (System.Int16), int (System.Int32), long (System.Int64).
  • Целочисленные (без знака): byte (System.Byte), ushort (System.UInt16), uint (System.UInt32), ulong (System.UInt64).
  • Числа с плавающей запятой: float (System.Single), double (System.Double).
  • Десятичное число (для финансовых расчетов): decimal (System.Decimal).
  • Логический тип: bool (System.Boolean).
  • Символьный тип: char (System.Char) — представляет один UTF-16 код.

Также к фундаментальным типам часто относят:

  • Структуры даты и времени: DateTime (System.DateTime), DateTimeOffset, TimeSpan (System.TimeSpan).
  • Особый тип: Guid (System.Guid) — глобальный уникальный идентификатор.

Примеры и особенности:

// Целочисленные
int count = 42; // 32-битное со знаком
uint pixels = 1024u; // 32-битное без знака
long bigNumber = 1_000_000_000L; // 64-битное

// Числа с плавающей запятой
float temperature = 36.6f; // Требуется суффикс 'f'
double pi = 3.14159; // Тип по умолчанию для дробных чисел
decimal price = 199.99m; // Для денег, требуется суффикс 'm'

// Логический и символьный
bool isEnabled = true;
char firstLetter = 'A';

// Дата и время
DateTime today = DateTime.Today;
TimeSpan duration = TimeSpan.FromHours(2.5);
Guid sessionId = Guid.NewGuid();

Эти типы являются типами значений (value types), что означает, что они хранят данные непосредственно в своей области памяти (обычно в стеке для локальных переменных) и копируются по значению.

Ответ 18+ 🔞

Давай разберёмся с этими базовыми типами в C#, а то некоторые думают, что программирование — это только нейросети и блокчейны. А без вот этого фундамента ты как строитель без кирпичей — только воздушные замки из говна лепить.

Вот смотри, в C# есть набор примитивных типов, которые уже вшиты в сам язык и пространство имён System. Это как базовый набор инструментов в гараже: молоток (int), отвёртка (bool), гаечный ключ (decimal). Без них нихуя не соберёшь.

Основные категории, чтобы не путаться:

  • Целые числа со знаком: sbyte, short, int, long. Это для всего, что может быть отрицательным: температура, счёт в игре, баланс на карте после оплаты ипотеки.
  • Целые числа без знака: byte, ushort, uint, ulong. Тут только плюс. Количество пикселей, дни без пьянки (в теории), индекс в массиве — отрицательным не бывает.
  • Дробные числа (плавающая запятой): float, double. Для всего, где нужна дробная часть, но есть погрешность, как в жизни. double — точнее и обычно по умолчанию.
  • Десятичное число для денег: decimal. Вот это, блядь, важно! Для финансовых расчётов, где каждая копейка на счету. Не используй double для денег, а то получишь округление, от которого волосы дыбом встанут.
  • Логический тип: bool. Всё просто: true (правда) или false (ложь). Как ответ на вопрос "Начальник — мудак?".
  • Символьный тип: char. Один-единственный символ, буква, цифра, смайлик. Внутри — код UTF-16.

Ещё часто используют эти штуки, их тоже к основам приписывают:

  • Дата и время: DateTime, TimeSpan. Чтобы знать, когда ты начал задачу и сколько уже проёбываешь время.
  • Уникальный идентификатор (GUID): Guid. Глобально уникальная строка, чтобы всё подписать и не перепутать. Как отпечаток пальца для данных.

Смотри, как это выглядит в коде:

// Целые числа
int количество_попыток_понять_задачу = 42;
uint количество_пикселей_на_экране = 1024u; // суффикс 'u'
long очень_большое_число = 1_000_000_000L; // суффикс 'L', можно подчёркивания

// Дробные числа
float температура_тела = 36.6f; // без 'f' не скомпилируется, будет ругаться
double число_Пи = 3.14159; // тут суффикс не нужен
decimal цена_новой_видеокарты = 199999.99m; // суффикс 'm' ОБЯЗАТЕЛЕН!

// Логика и символы
bool проект_запустился = true;
char первая_буква_алфавита = 'A';

// Дата, время и GUID
DateTime сегодняшний_день = DateTime.Today;
TimeSpan сколько_я_спал = TimeSpan.FromHours(2.5);
Guid id_этой_сессии = Guid.NewGuid(); // сгенерирует новый уникальный

Запомни главное: все эти типы — типы значений (value types). Это значит, что когда ты их присваиваешь или передаёшь в метод, то копируется само значение, а не ссылка на него. Как если бы ты переписал номер телефона на бумажку — у каждого будет своя копия, а не один общий листок. Хранятся они обычно в стеке (для локальных переменных), что быстро и эффективно. Вот так, без этой базы дальше не двинешься.