← Назад к вопросам

Какой знаешь базовый тип в dotNet?

1.6 Junior🔥 182 комментариев
#Основы C# и .NET

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные базовые типы в .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#, так как они влияют на производительность, управление памятью и дизайн приложений.

Какой знаешь базовый тип в dotNet? | PrepBro