No desenvolvimento de software orientado a objetos, a inicialização de objetos é uma tarefa muito comum. No C#, a maneira tradicional de definir construtores pode se tornar verbosa, especialmente quando você precisa inicializar muitas propriedades. Para simplificar esse processo e tornar o código mais limpo e legível, o C# introduziu o conceito de construtores primários a partir da versão 12. Este artigo explora o que são construtores primários, como usá-los e as vantagens que eles oferecem.
O que são construtores primários?
Construtores primários são uma nova sintaxe para criar e inicializar objetos de forma mais concisa e direta. Ao utilizar construtores primários, você pode definir parâmetros de entrada diretamente na declaração da classe e o C# automaticamente cria e inicializa as propriedades correspondentes. Esse recurso visa reduzir a quantidade de código repetitivo e melhorar a clareza do código.
Sintaxe básica
Antes do C# 12, a definição de construtores em classes seguia um padrão mais tradicional e detalhado. Aqui está um exemplo de como os construtores eram definidos anteriormente:
public class Pessoa
{
public string Nome { get; }
public int Idade { get; }
public Pessoa(string nome, int idade)
{
Nome = nome;
Idade = idade;
}
}
Neste caso, você precisa definir o construtor e, em seguida, inicializar manualmente as propriedades da classe. O código inclui um bloco de construtor que atribui valores aos campos ou propriedades da classe.
Se você deseja criar uma classe imutável, onde as propriedades são somente leitura, você deve utilizar apenas “get” e omitir “set”, como no exemplo acima. No entanto, se a mutabilidade for um requisito, você pode definir as propriedades com “get” e “set” e inicializá-las através do construtor primário.
Com o C# 12, a mesma classe pode ser definida de forma mais concisa usando construtores primários:
public class Pessoa(string nome, int idade)
{
public string Nome { get; } = nome;
public int Idade { get; } = idade;
}
Aqui, “nome” e “idade” são declarados diretamente na assinatura da classe, e as propriedades são inicializadas automaticamente, eliminando a necessidade de um bloco de construtor separado.
Interagindo com herança
Construtores primários também interagem com a herança de maneira que simplifica o código e mantém a clareza. Vamos ver um exemplo de como os construtores primários funcionam com herança
public class Pessoa(string nome, int idade)
{
public string Nome { get; } = nome;
public int Idade { get; } = idade;
}
public class Funcionario(string nome, int idade, string departamento)
: Pessoa(nome, idade)
{
public string Departamento { get; } = departamento;
}
Aqui, “Funcionario” herda de “Pessoa” e adiciona uma nova propriedade “Departamento”. O construtor de “Funcionario” inclui os parâmetros do construtor de “Pessoa”, permitindo que valores sejam passados para o construtor da classe base. Isso permite uma inicialização limpa e direta dos membros da classe base e da classe derivada.
Acelere a sua carreira conosco!
Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET Start: Clique aqui
Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET Expert: Clique aqui
Conclusão
Os construtores primários em C# 12 oferecem uma maneira eficiente e direta de criar e inicializar objetos, simplificando a sintaxe. Comparado ao método tradicional de definição de construtores, os construtores primários tornam a criação de classes mais intuitiva e menos verbosa. Embora existam diferenças importantes na forma como os construtores primários são tratados em classes, records e structs, o conceito oferece uma ferramenta poderosa para melhorar a clareza e a eficiência do código. Ao entender e aplicar construtores primários, você pode criar código mais limpo e de fácil manutenção, aprimorando a qualidade do desenvolvimento de software.