Immutability
Objetos imutaveis para thread-safety, previsibilidade e estilo funcional em C#
Imutabilidade torna objetos thread-safe por padrao, mais faceis de raciocinar e seguros para compartilhar entre componentes. Uma vez criado, o estado nunca muda β qualquer "alteracao" cria uma nova instancia.
Por que imutabilidade importa?
Objetos mutaveis compartilhados sao a principal causa de bugs em sistemas concorrentes. Imutabilidade elimina essa classe inteira de problemas.
| Aspecto | Mutavel | Imutavel |
|---|---|---|
| Thread Safety | Requer locks | Seguro por padrao |
| Raciocinio | Quem alterou? Quando? | Valor nunca muda |
| Compartilhamento | Defensive copies | Passe livremente |
| Hash/Dictionary keys | Hash pode mudar | Hash estavel |
| Debugging | Estado muda entre breakpoints | Estado previsivel |
| Estilo funcional | Efeitos colaterais | Funcoes puras |
Por que imutabilidade e importante em C#?
Imutabilidade torna objetos thread-safe por padrao, elimina bugs de aliasing, garante que hash codes permanecam estaveis para uso como chaves de dicionario, e facilita o raciocinio sobre o codigo. Em sistemas distribuidos, snapshots imutaveis permitem leituras sem lock e publicacao atomica de novos estados.
Padroes de implementacao
Records
Igualdade por valor, with expressions, imutavel por padrao.
Init-only setters
Propriedades init permitem object initializers mas impedem mutacao apos construcao.
Readonly struct
Previne mutacao de campos e evita defensive copies ocultas.
Immutable Collections
Colecoes persistentes: edicoes criam novas versoes compartilhando estrutura.