C# - Conceitos : Constructor (revisitado) - IV
Hoje vamos rever um conceito muito importante na linguagem C#: O Construtor. |
Continuando a terceira parte do artigo vamos apresentar outros conceitos importantes sobre construtores.
Até o momento vimos que os construtores são usados para atribuir valores a membros da classe.
Será que existe um conceito oposto ao conceito de Construtor na linguagem C# ?
Sim, existe, são os Destructors ou finalizadores.
Nota: Não confunda Deconstructors com Destructors, os conceitos são bem diferentes.
Desctructors
Desctructors ou Finalizadores na linguagem C# são métodos dentro da classe usados para destruir instâncias dessa classe quando não são mais necessários.
São utilizados para realizar a limpeza do ambiente quando a instância da classe esta sendo coletada pelo coletor de lixo (garbage collector).
O programador não tem controle sobre quando o finalizador será chamado, pois isso é determinado pelo coletor de lixo que verifica se há objetos que não estão mais sendo usados pelo aplicativo. Se considerar um objeto elegível para finalização, ele chama o finalizador (se houver) e recupera a memória usada para armazenar o objeto.
Assim, uma variável de instância ou um objeto é elegível para destruição quando não estiver mais acessível , e, quando o objeto for elegível para finalização, o coletor de lixo executa o método Finalize do objeto.
A seguir algumas características de um Desctructor:
Exemplo de código usando um Destructor:
class DestructorDemo
{
// codigo
// Destructor
~DestructorDemo()
{
// código
}
}
|
Podemos implementar um Destructor ou Finalizador como uma definição do corpo de expressão:
public class Exemplo { public override string ToString() => GetType().Name; ~Exemplo() => Console.WriteLine($"O destructor {ToString()} esta em execução.");
}
|
Como internamente o Destructor chama implicitamente o método Finalize() da classe base do objeto, uma chamada ao finalizador pode ser descrita assim:
protected override void Finalize() { try { //instrução de limpeza } finally { base.Finalize(); } } |
Nos aplicativos .NET Framework (mas não nos aplicativos .NET Core), os finalizadores também são chamados quando o programa é encerrado.
Finalizadores vazios não devem ser usados.
Quando uma classe contém um finalizador, uma entrada é criada na fila Finalize; e quando o finalizador é chamado, o coletor de lixo é chamado para processar a fila. Assim, um finalizador vazio apenas causa uma perda desnecessária de desempenho.
"Com o
ouvir dos meus ouvidos ouvi, mas agora te vêem os meus olhos.
Por isso me abomino e me arrependo no pó e na cinza. "
Jó 42:5,6
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - 10 dicas para otimizar o seu código - Aumente o desempenho e eficácia de sua aplicação C#
C# - Usando expressões lambdas para implementar delegates - III
C# - Criando e usando uma classe ou método Genérico - Macoratti