Чем отличаются value type и reference type в C#? Что может произойти, если не понимать эту разницу при передаче данных между методами?

C# / .NET Основы языка Junior

Что это: Value type хранит данные непосредственно в экземпляре переменной, а reference type хранит ссылку на объект в managed heap. При копировании value type создаётся независимая копия данных, а при копировании reference type копируется только ссылка на один и тот же объект.

Почему важно: Это базовая концепция, без понимания которой невозможно правильно работать с памятью, параметрами методов и изменяемыми объектами.

Под капотом: CLR размещает объекты reference type в managed heap и работает с ними через ссылки. Для value type данные обычно копируются целиком, а IL-инструкции ldobj и stobj используются для чтения и записи значений.

Типичная ошибка: Ожидать независимую копию объекта класса после присваивания и удивляться, что изменение через одну переменную видно через другую.

struct Point { public int X; }
class User { public string Name; }

Point p1 = new Point { X = 10 };
Point p2 = p1;
p2.X = 20;

User u1 = new User { Name = 'Alex' };
User u2 = u1;
u2.Name = 'John';