Eu estou olhando para algum código e tem esta declaração:
~ConnectionManager()
{
Dispose(false);
}
A classe implementa a IDisposable
interface, mas não sei se isso faz parte do qual o til (~) é usado.
Eu estou olhando para algum código e tem esta declaração:
~ConnectionManager()
{
Dispose(false);
}
A classe implementa a IDisposable
interface, mas não sei se isso faz parte do qual o til (~) é usado.
Respostas:
~ é o destruidor
Finalizar
Em C #, o método Finalize executa as operações que um destruidor C ++ padrão faria. No C #, você não chama Finalize - você usa a sintaxe do destruidor C ++ para colocar um símbolo til (~) antes do nome da classe.
Descarte
É preferível descartar objetos em um método Close()
ou Dispose()
que possa ser chamado explicitamente pelo usuário da classe. Finalizar (destruidor) são chamados pelo GC.
A interface IDisposable informa ao mundo que sua classe mantém recursos que precisam ser descartados e fornece aos usuários uma maneira de liberá-los. Se você precisar implementar um finalizador em sua classe, seu método Dispose deverá usar o GC.SuppressFinalize()
método para garantir que a finalização da sua instância seja suprimida.
O que usar?
Não é legal chamar explicitamente um destruidor. Seu destruidor será chamado pelo coletor de lixo. Se você manipular preciosos recursos não gerenciados (como identificadores de arquivo) dos quais deseja fechar e descartar o mais rápido possível, implemente a interface IDisposable.
Finalize
, o método é chamado recursivamente para todas as instâncias da cadeia de herança, da mais derivada à menos derivada" . Observe que esse não é o mesmo comportamento que você teria dos destruidores herdáveis.
Este é um finalizador . Para ser sincero, você raramente precisará escrever um finalizador. Você realmente só precisa escrever um se:
IntPtr
) e não pode usar o SafeHandle
que torna mais fácilIDisposable
em uma classe que não está selada. (Minha preferência é selar classes, a menos que elas sejam projetadas para herança.) Nesses casos, um finalizador faz parte do padrão canônico Dispose.É usado para indicar o destruidor da classe.
try/finally
bloco geralmente inútil que garante que o Finalize
método pai seja chamado. A maioria das coisas verdadeiras para os destruidores é verdadeira para os finalizadores e vice-versa, mas as palavras significam coisas ligeiramente diferentes.
O mesmo que C ++, é o destruidor; no entanto, em C # você não o chamou explicitamente, ele é chamado quando o objeto é coletado.
Consulte Destrutores (Guia de programação em C #) . Esteja ciente, no entanto, que, diferentemente do C ++, o programador não tem controle sobre quando o destruidor é chamado, porque isso é determinado pelo coletor de lixo.
~ geralmente representa um desconstrutor. que é executado logo antes da morte de um objeto.
Aqui está uma descrição dos desconstrutores C # que encontrei