Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные базовые типы в .NET
В .NET (и C#) базовые типы (built-in types) делятся на две основные категории: типы значения (value types) и ссылочные типы (reference types). Они являются фундаментом для всех систем типов в платформе. Вот основные из них:
1. Типы значений (Value Types)
Эти типы хранят данные непосредственно в памяти стека (или внутри объектов в куче). К ним относятся:
Примитивные типы (Primitive Types)
-
Целочисленные типы:
byte b = 255; // 8-bit (0 to 255) sbyte sb = -128; // 8-bit signed (-128 to 127) short s = -32768; // 16-bit ushort us = 65535; // 16-bit unsigned int i = -2147483648; // 32-bit (самый часто используемый) uint ui = 4294967295; // 32-bit unsigned long l = 9223372036854775807; // 64-bit ulong ul = 18446744073709551615; // 64-bit unsigned -
Типы с плавающей точкой:
float f = 3.14f; // 32-bit, суффикс 'f' double d = 3.14; // 64-bit (стандарт для дробных чисел) decimal dec = 123.456m; // 128-bit для финансовых расчётов -
Символьный и логический типы:
char c = 'A'; // 16-bit Unicode символ bool flag = true; // Логическое значение (true/false)
Структуры (Structures)
DateTime– дата и времяTimeSpan– интервал времениGuid– глобальный уникальный идентификаторDateTime now = DateTime.Now; TimeSpan duration = TimeSpan.FromHours(2); Guid id = Guid.NewGuid();
Перечисления (Enums)
public enum Status { Active, Inactive, Pending }
Status current = Status.Active;
2. Ссылочные типы (Reference Types)
Эти типы хранят ссылку на объект в управляемой куче (managed heap). К базовым относятся:
Строки (String)
string text = "Hello, .NET!";
string multiline = @"Line 1
Line 2";
Важно: string — неизменяемый (immutable) тип, каждая операция создаёт новый объект.
Объектный тип (Object)
object obj = "anything"; // Базовый класс для всех типов
int number = 42;
object boxed = number; // Упаковка (boxing)
int unboxed = (int)boxed; // Распаковка (unboxing)
Динамический тип (Dynamic)
dynamic dyn = 10;
dyn = "Now I'm a string"; // Проверка типов происходит в runtime
Классы для массивов
int[] array = new int[] {1, 2, 3};
int[,] matrix = new int[2,2]; // Многомерный массив
3. Особые типы
Указатели (Pointer Types)
Используются в небезопасном коде (unsafe context):
unsafe {
int value = 42;
int* pointer = &value;
Console.WriteLine(*pointer); // 42
}
Nullable типы
Позволяют типам значений принимать null:
int? nullableInt = null;
nullableInt = 42;
Кортежи (Tuples)
Структуры для группировки значений:
(string, int) tuple = ("John", 30);
var namedTuple = (Name: "Alice", Age: 25);
4. Различия и важные аспекты
Ключевые отличия value vs reference types:
- Место хранения: стэк vs куча
- Наследование: типы значений не могут наследоваться (кроме
System.ValueType) - null значение: типы значений по умолчанию не могут быть
null(кроме nullable) - Копирование: при присваивании типов значений копируется всё значение, ссылочных — только ссылка
Пример для понимания:
// Value type
int a = 10;
int b = a; // Копируется значение
b = 20; // 'a' остается 10
// Reference type
int[] arr1 = new int[] {1, 2, 3};
int[] arr2 = arr1; // Копируется только ссылка
arr2[0] = 100; // arr1[0] тоже становится 100!
Базовые типы в .NET обеспечивают:
- Эффективность: примитивные типы оптимизированы для процессора
- Безопасность типов: строгая проверка на этапе компиляции
- Интероперабельность: взаимодействие с неуправляемым кодом
- Универсальность: основа для создания любых пользовательских типов
Понимание этих базовых типов критически важно для эффективного программирования на C#, так как они влияют на производительность, управление памятью и дизайн приложений.