Коллекция вопросов ❓ на собеседовании в C# 🍧

Обзор вопросов по языка програмиированию C# и технологии NET


Project maintained by Dvurechensky-Docs Hosted on GitHub Pages — Theme by mattgraham

🧱 Какие существуют базовые типы данных в .NET и как они устроены?

Typing SVG

Static Badge

✨ Оглавление

⬆ Вернуться к главной


1️⃣ Основная классификация

В .NET все типы делятся на две большие категории:

Категория Примеры Где хранятся Особенности
Value types (значимые) int, double, bool, struct, enum Stack / Inline в объекте Хранят значение прямо, копируются при присваивании, не требуют GC для памяти самого значения
Reference types (ссылочные) string, class, object, interface, массивы Heap Хранят ссылку на объект, GC управляет памятью, присваивание копирует ссылку

2️⃣ Value Types — подробности

Примеры

Особенности

  1. Хранятся на стеке, если локальные переменные.
  2. Копируются при присваивании:

    int a = 5;
    int b = a; // создаётся копия
    b = 10;    // a остаётся 5
    
  3. Нет null, кроме Nullable<T> (int?).
  4. Упаковка (Boxing) — преобразование value type в object:

    int x = 42;
    object obj = x; // boxing
    int y = (int)obj; // unboxing
    
    • Упаковка — дорогостоящая операция, создает объект на heap.

3️⃣ Reference Types — подробности

Примеры

Особенности

  1. Хранят ссылку на объект, сам объект на heap.
  2. Присваивание копирует ссылку, а не значение:

    class Person { public string Name; }
    Person p1 = new Person { Name = "Alice" };
    Person p2 = p1;
    p2.Name = "Bob";
    Console.WriteLine(p1.Name); // "Bob"
    
  3. GC управляет освобождением памяти.
  4. Может быть null.

4️⃣ Тип string — особый reference type


5️⃣ Nullable типы (T?)


6️⃣ Структура памяти и упаковка


7️⃣ Типы в .NET по системной классификации

CLR тип C# тип Размер Примечание
System.Boolean bool 1 байт  
System.Byte byte 1 байт беззнаковый
System.SByte sbyte 1 байт знаковый
System.Int16 short 2 байта  
System.UInt16 ushort 2 байта беззнаковый
System.Int32 int 4 байта  
System.UInt32 uint 4 байта беззнаковый
System.Int64 long 8 байт  
System.UInt64 ulong 8 байт беззнаковый
System.Single float 4 байта IEEE 754
System.Double double 8 байт IEEE 754
System.Decimal decimal 16 байт для финансов
System.Char char 2 байта UTF-16
System.String string ссылочный immutable
System.Object object ссылочный базовый тип

8️⃣ Каверзные моменты и подводные вопросы

  1. Boxing / unboxing

    • Вопросы на производительность: когда оно происходит, чем опасно.
  2. Почему string reference, а int value?

    • Потому что строки immutable, управляются на heap.
  3. Разница между struct и class

    • struct — value type, копируется по значению, хранится на стеке или inline.
    • class — reference type, хранится на heap, GC управляет.
  4. Nullable типы

    • Как работают и что внутри Nullable<T> (HasValue + Value).
  5. Что происходит при присваивании

    • Value type → копия.
    • Reference type → копия ссылки.
  6. Размеры типов

    • Вопрос о int = 4 байта, long = 8 байт и т.д.
  7. Immutable vs mutable

    • string immutable, struct по умолчанию mutable (можно делать readonly struct).

9️⃣ Примеры

int a = 10;
int b = a; // копия
b = 20;
Console.WriteLine(a); // 10

string s1 = "hello";
string s2 = s1; // ссылка на тот же объект
s2 = s2.Replace("h","H");
Console.WriteLine(s1); // "hello"
int? x = null;
if (x.HasValue)
    Console.WriteLine(x.Value);
object obj = 42;      // boxing
int y = (int)obj;     // unboxing

⬆ Вернуться к главной

✨Dvurechensky✨