Ответ
В 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). Это значит, что когда ты их присваиваешь или передаёшь в метод, то копируется само значение, а не ссылка на него. Как если бы ты переписал номер телефона на бумажку — у каждого будет своя копия, а не один общий листок. Хранятся они обычно в стеке (для локальных переменных), что быстро и эффективно. Вот так, без этой базы дальше не двинешься.