Aprimorando a Robustez do Código com Membros Obrigatórios no C# 11
Tags: braziliandevs, tutorial, dotnet, csharp
Published: 2024-03-13 00:00:00

Continuando nossa série sobre as novas funcionalidades do C# 11, vamos explorar um recurso projetado para melhorar a integridade e a robustez dos tipos em nossos programas: os membros obrigatórios. Com essa adição, o C# 11 torna possível definir propriedades e campos em classes e structs que devem ser obrigatoriamente fornecidos durante a criação de uma instância, garantindo assim que os objetos sejam sempre construídos em um estado válido.

## O Que São Membros Obrigatórios?

Membros obrigatórios são uma nova maneira de garantir que determinadas propriedades ou campos de uma classe ou struct sejam fornecidos antes que uma instância seja considerada válida. Esse recurso ajuda a evitar erros comuns em tempo de execução relacionados a valores nulos ou não inicializados, promovendo padrões de codificação mais seguros.

### Exemplo 1: Definindo uma Propriedade Obrigatória

```csharp
public class Produto
{
    public required string Nome { get; set; }
    public decimal Preco { get; set; }
}
```

Neste exemplo, `Produto` tem uma propriedade `Nome` marcada como `required`, indicando que cada instância de `Produto` deve ter um `Nome` válido fornecido no momento da criação.

### Exemplo 2: Construção de Objetos com Membros Obrigatórios

```csharp
var produto = new Produto { Nome = "Caderno", Preco = 7.99m };
```

Ao criar uma instância de `Produto`, é necessário fornecer um valor para a propriedade `Nome`, de acordo com a regra definida anteriormente. A tentativa de compilar o código sem fornecer `Nome` resultará em um erro.

### Exemplo 3: Uso com Construtores

```csharp
public class Contato
{
    public required string Email { get; set; }
    public Contato(string email) => Email = email;
}
```

Mesmo quando um construtor é usado para inicializar a instância, as propriedades marcadas como `required` devem ser atribuídas, garantindo a consistência do objeto desde sua criação.

### Exemplo 4: Structs com Membros Obrigatórios

```csharp
public struct Configuracao
{
    public required string Chave { get; set; }
    public string Valor { get; set; }
}
```

Os membros obrigatórios também são aplicáveis a structs, garantindo que instâncias de structs sejam inicializadas com dados essenciais, fortalecendo a tipagem e a segurança de dados em toda a aplicação.

## Conclusão

Os membros obrigatórios introduzidos no C# 11 representam um passo significativo para a construção de softwares mais robustos e seguros, minimizando erros comuns relacionados à inicialização inadequada de objetos. Ao forçar que certas informações sejam fornecidas para a construção de instâncias, os desenvolvedores podem escrever códigos mais claros e expressivos, com garantias de integridade de dados desde o início.

Essa funcionalidade se alinha com as tendências modernas de programação que enfatizam a segurança de tipos e a prevenção de erros, oferecendo mais uma ferramenta valiosa para o desenvolvimento de aplicações confiáveis e de alta qualidade em C#.

Fique conosco na série para descobrir mais sobre como as novas funcionalidades do C# 11 podem enriquecer seus projetos e levar suas habilidades de codificação para o próximo nível.