Pergunta

Eu estou olhando para algum código e tem a seguinte declaração:

~ConnectionManager()
{
    Dispose(false);
}

Os implementos de classe da interface IDisposable, mas eu não sei se isso é parte do que o til (~) é utilizado.

Foi útil?

Solução

~ é o destruidor

  1. Destructors são invocados automaticamente e não pode ser invocado explicitamente.
  2. Destructors não pode ser sobrecarregado. Assim, uma classe pode ter, no máximo, um destruidor.
  3. Destructors não são herdadas. Assim, uma classe não possui senão o único, que pode ser declarado nele destruidores.
  4. Destructors não pode ser usado com estruturas. Eles são usados ??somente com classes. Uma instância torna-se elegível para a destruição quando já não é possível para qualquer código para usar o exemplo.
  5. A execução do destrutor para a instância pode ocorrer a qualquer momento após a instância torna-se elegível para a destruição.
  6. Quando uma instância é destruído, as destruidores na sua cadeia herança são chamados, em ordem, a partir de mais derivado de menos derivada.

Finalize

Em C #, o método Finalize executa as operações que um destruidor padrão C ++ faria. Em C #, você não nomeá-lo Finalize - você usa o C ++ sintaxe destruidor de colocar um til (~) símbolo antes do nome da classe.

Eliminar

É preferível dispor de objectos num método Close() ou Dispose() que podem ser chamados explicitamente pelo utilizador da classe. Finalize (destructor) são chamados pelo GC.

O IDisposable de interface diz ao mundo que sua classe prende em recursos que precisam ser eliminados e fornece aos usuários uma maneira de liberá-los. Se você precisa implementar um finalizador na sua classe, o seu método Dispose deve usar o método GC.SuppressFinalize() para garantir que a finalização da sua instância é suprimida.

O que usar?

Não é legal para chamar um destrutor explicitamente. Seu destrutor será chamado pelo coletor de lixo. Se você fizer punho precioso recursos não gerenciados (como identificadores de arquivo) que deseja fechar e descartar o mais rápido possível, você deve implementar a interface IDisposable.

Outras dicas

Esta é uma finalizador . Para ser honesto, você deve muito raramente precisa escrever um finalizador. Você realmente só precisa escrever um se:

  • Você tem acesso directo a um recurso não gerenciado (por exemplo através de uma IntPtr) e você não pode usar SafeHandle que torna mais fácil
  • Você está implementando IDisposable em uma classe que não está selado. (Minha preferência é para as classes de vedação a menos que eles são projetados para herança.) Um finalizador faz parte do padrão Dispose canônica em tais casos.

É usado para indicar o destruidor para a classe.

Mesmo como C ++, é o destruidor; no entanto, em C # você não chamou-lhe explicitamente, ela é invocada quando o objeto seja recolhido.

Consulte Destructors (C # Guia de Programação) . Esteja ciente, no entanto, que, ao contrário do C ++, programador não tem controle sobre quando o destruidor é chamado, porque isso é determinado pelo coletor de lixo.

~ normalmente representa uma deconstructor. que é executado logo antes de um objeto morre.

Aqui está uma descrição do C # desconstrutores i encontrados

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top