Capacidade antes restrita ao uso de Records, com o C# 12 podemos agora também empregar Primary Constructors na implementação de classes e structs. Parâmetros podem ser definidos na declaração de uma classe ou struct, viabilizando com isto a utilização dos mesmos no corpo dessas estruturas.
Na próxima listagem temos um exemplo deste tipo de implementação com a classe Projeto:
- Os parâmetros do Primary Constructor acompanham a declaração do nome da classe Projeto (linha 3);
- As propriedades TargetFramework, Descricao e Tecnologias são read-only, recebendo os parâmetros especificados via Primary Constructor;
- Um simples construtor pode referenciar o Primary Constructor, como indicado nas linhas 5 e 6;
- HorasTrabalhadas segue o comportamento de uma propriedade convencional, permitindo a leitura e escrita de valores.
No momento da publicação deste artigo Primary Constructors em classes e structs ainda são considerados um recurso em modo Preview. Assim, torna-se necessário configurar o atributo LangVersion no arquivo .csproj de projetos que utilizem esta capacidade com o valor preview:
Na próxima listagem temos exemplos de utilização do Primary Constructordo tipo Projeto, assim como do construtor convencional que referencia este elemento:
Ao executar esta aplicação será produzido o resultado apresentado na imagem a seguir:
Este primeiro projeto foi disponibilizado no GitHub:
https://github.com/renatogroffe/CSharp12-PrimaryConstructorClass
Caso achem útil esta solução, peço por favor uma estrela no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!
Já a próxima listagem exemplifica o uso de um Primary Constructor em um struct chamado Demografia (linha 3), com os valores dos diferentes parâmetros declarados sendo associados às propriedades Pais, Ano e Populacao:
No código a seguir estão exemplos de utilização do struct Demografia(incluindo seu Primary Constructor):
E ao executar esta aplicação teremos como resultado:
Esta segunda Console Application também foi disponibilizada no GitHub:
https://github.com/renatogroffe/CSharp12-PrimaryConstructorStruct
Caso também achem útil esta nova solução, peço por favor mais uma estrela no repositório apoiando. Fica ainda o convite para que vocês me sigam lá no GitHub!
*O conteúdo deste artigo é de responsabilidade do(a) autor(a) e não reflete necessariamente a opinião do iMasters.