В чём разница между value type и reference type в C#?
Value type (struct, int, bool, enum) хранит данные напрямую и копируется при присваивании; reference type (class, string, массивы) хранит указатель на данные в куче, и при присваивании копируется указатель, а не сам объект. Передача структуры в метод, который её меняет, молча работает с копией, если не передать её через ref. Структура, хранящаяся в поле класса, лежит в куче вместе с ним, а не на стеке.