¿Cuál es la diferencia entre value types y reference types en C#?
Un value type (struct, int, bool, enum) guarda sus datos directamente y se copia al asignarlo; un reference type (class, string, arrays) guarda un puntero a datos en el heap, y al asignarlo se copia el puntero, no el objeto. Pasar una struct a un método que la muta opera silenciosamente sobre una copia, a menos que la pases por ref. Una struct guardada en un campo de una clase vive en el heap junto con ella, no en el stack.