Struct x class: valor x referência
Pergunta
Qual a diferença entre `struct` e `class` em C#, e que armadilha surge ao passar uma struct grande ou mutá-la numa coleção?
Resposta esperada
`class` é tipo de referência: a variável guarda um ponteiro pro objeto no heap, atribuir/passar copia a referência. `struct` é tipo de valor: a variável contém os dados, e atribuir/passar como parâmetro faz uma cópia dos bytes. Armadilhas: (1) struct grande passada por valor repetidamente copia muitos bytes — custo escondido; use `in`/`ref` ou repense se deveria ser class. (2) Mutar uma struct dentro de uma coleção (`lista[0].X = 5`) muta uma cópia temporária, não o elemento — por isso structs idiomáticas são imutáveis. (3) Boxing: guardar uma struct numa referência (`object`, interface antiga) aloca no heap e custa. Structs brilham pra valores pequenos, imutáveis e de vida curta (Point, dinheiro), onde evitam alocação.
Por que perguntam isso
Pergunta pleno de C#. Sinais de experiência: a mutação de cópia em coleção e o boxing.