Records & Pattern Matching
Records como data carriers imutaveis e pattern matching para decisoes declarativas em C#
with para mutacao nao-destrutiva e Deconstruct automatico que habilita pattern matching posicional. Juntos, eliminam toneladas de boilerplate e tornam o codigo mais seguro. O que sao Records?
record e um tipo por referencia com igualdade por valor e suporte nativo a mutacao nao-destrutiva via with. Usado como data carrier imutavel. Suporta heranca como classes.
record struct e um tipo por valor com as mesmas vantagens. Use quando quiser semantica de valor e layout stack-friendly. Adicione readonly para impedir mutacao dos campos.
record class vs record struct
| Aspecto | record (class) | record struct | readonly record struct |
|---|---|---|---|
| Tipo | Referencia (heap) | Valor (stack) | Valor (stack) |
| Igualdade | Por valor | Por valor | Por valor |
| Heranca | Sim | Nao | Nao |
| Imutavel por padrao | Positional sim | Nao | Sim |
with | Sim | Sim | Sim |
| Quando usar | Domain models, DTOs | Pequenos value objects | Chaves de dicionario, IDs |
Sintaxe posicional β igualdade por valor
O compilador sintetiza Equals, GetHashCode, Deconstruct e um ToString legivel. A expressao with copia a, alterando apenas uma propriedade.
Sintaxe nominal β init-only properties
Nao precisa usar parametros posicionais; init-only setters mantem o objeto efetivamente imutavel apos a construcao.
record struct e readonly record struct
Um record struct e um tipo por valor. Adicionar readonly impede a mutacao dos campos e habilita defensive copy.
Equals, GetHashCode, Deconstruct e ToString automaticamente. Voce ganha igualdade por valor, pattern matching posicional e with sem escrever boilerplate. Menos codigo, menos bugs.