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: