Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 20506|Resposta: 1

[Fonte] C# Deep Dive - Destruidores

[Copiar link]
Publicado em 17/08/2018 13:54:43 | | |
Destruidores raramente são usados em C#, então muitas pessoas já os esqueceram, embora sejam pouco úteis e inúteis para estudar.

Um.        Características dos destruidores:

Destruidores só podem existir em classes, não estruturas; O destruidor não pode ter modificadores, incluindo modificadores de controle de acesso, modificadores estáticos, modificadores abstratos, modificadores virtuais, etc.; O destruidor não tem parâmetros, o que significa que não pode haver sobrecarga.

Dois.        Quando chamar o destrutor:

O destruidor é chamado quando o objeto é reciclado pelo coletor de lixo, mas o coletor de lixo tem uma característica: é preguiçoso,
Ele não recicla a variável imediatamente após sair do escopo e da vida útil, mas apenas quando acha apropriado, geralmente quando a memória está apertada. Por exemplo:

Após o método btn_Click retornar, o de deve ser terminado, mas seu destruidor não é chamado, indicando que o coletor de lixo não o reciclou; Quando você fecha o formulário, o destruidor é executado, indicando que, ao final do programa, o coletor de lixo é forçado a reciclá-lo (^-^).
Claro, podemos chamar o GC.Collect() para forçar a reciclagem:

Quando você clica em btn1, de1 e o novo Demo() são encerrados e o destruidor é chamado.
o de2 ainda não expirou seu período de vida, então mesmo que o método GC.Collect seja chamado, ele não será reciclado; quando o btn1_Click retorna, o de2 expirou seu período de vida, mas devido à preguiça do coletor de lixo, ainda não é reciclado; Só quando btn2 chama o método GC.Collect é que de2 é recuperado e seu destruidor é chamado.

Uma forma de evitar chamadas de destrutores é implementar a interface IDisposable, que define um método único: Dispose().
Isso impede que o destruidor seja chamado internamente, o que significa que, se você estiver entediado, pode implementar essa interface sem chamar o GC.SuppressFinalize(^-^), que é irrelevante porque não bloqueia o destruidor:

Agora o destruidor de de1 não será chamado.

Três.        A essência do destruidor:

Um destruidor é essencialmente um método que assume a forma de:

Normalmente pensamos que destruidores só podem ser chamados pelo sistema, não pelos próprios programadores, mas isso não é totalmente verdade, e destruidores também podem ser chamados explicitamente, afinal, é apenas um método:

Destruidores não são necessários a menos que recursos não gerenciados estejam abertos na classe





Anterior:C# Distinto deduplica objetos condicionalmente
Próximo:Mensagem de exceção: "StrongTypingException: IsPrima...
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com