C# - Apresentando o recurso Deconstruction


Hoje vamos abordar o recurso Deconstruction incluído na versão 7.0 da linguagem C#.

Existem algumas situações que você pode querer que um determinado objeto seja desconstruído com determinados valores atribuídos para variáveis.

A ideia do recurso Deconstruction ou Desconstruir não esta relacionado com destruir; destruir é sumir com tudo que existe. A desconstrução significa pegar algo que foi construído em algum momento e voltar ter partes separadas.

Assim, o recurso Deconstruction ou desconstrução é um processo de dividir um valor variável em partes e armazená-lo em novas variáveis. Isso pode ser útil quando uma variável armazena vários valores, como uma tupla.

A desconstrução é uma ótima maneira de consumir tuplas usando uma sintaxe que permite dividir uma tupla em variáveis.

Nota: Não confunda Deconstructors com Destructors, os conceitos são bem diferentes.

Deconstructors

A versão 7.0 da linguagem C# introduziu o padrão deconstructor ou desconstrutor.

Um desconstrutor (também chamado de método de desconstrução) age como um oposto ao construtor: Considerando que um construtor normalmente pega um conjunto de valores (como parâmetros) e os atribui a campos/propriedades da classe, um desconstrutor faz o inverso e atribui os campos/propriedades de volta a um conjunto de variáveis.

Um método de desconstrução deve ser chamado Deconstruct e deve ter um ou mais parâmetros do tipo out.

Então, o que um Deconstruct faz é desconstruir o objeto de volta às suas partes originais. E, podemos controlar como o objeto pode ser desconstruído.

A seguir temos uma classe Aluno com duas propriedades e um construtor que aceita dois parâmetros : nome e sobrenome;

Como podemos adicionar um Desconstrutor a essa classe ?

Simples...

Percebeu como é fácil ????

Basta fazer o seguinte:

Nota: Lembrando como funciona out : O out atua em um sentido, ele passa o valor do parâmetro (o que está dentro do método) para o argumento;

Muuito bem... E como usamos um Desconstrutor

A seguir temos como chamar o Desconstrutor :

No código criamos uma instância da classe Aluno e a seguir chamamos o Deconstructor : var (nome, sobrenome) = aluno

Note que o Deconstructor esta sendo invocado usando a sintaxe usada nas Tuplas da linguagem C#. Abaixo o resultado obtido:

Podemos também usar a seguinte sintaxe para chamar o Deconstructor:

Se as variáveis nas quais você esta deconstruindo já estiverem definidas basta usar: (nome, sobrenome) = aluno

Podemos também ter múltiplos Deconstructors na classe com diferentes parâmetros:

Abaixo um exemplo de como chamar cada desconstrutor:

Um Desconstrutor não precisa estar diretamente anexado na classe. Podemos implementar um Deconstructor como um método de extensão.

Vamos fazer isso para o exemplo:

1- Crie ume classe estática chamada MinhaClasseEstaticaComDestructor;
2- Crie um método estático com a mesma visibilidade da classe chamado Deconstruct;
3- No primeiro parâmetro especifique o tipo Aluno no qual o método vai operar e use o modificador this;

Defina o código conforme mostrado abaixo:

Pronto , agora é só usar...

No próximo artigo veremos como usar este recurso com tuplas.

Pegue o código do projeto aqui: CShp_Construtor4.zip

"E se abrires a tua alma ao faminto, e fartares a alma aflita; então a tua luz nascerá nas trevas, e a tua escuridão será como o meio-dia."
Isaías 58:10

 Referências:


José Carlos Macoratti