O que o til antes de um nome de function significa em C #?

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

~ConnectionManager() { Dispose(false); } 

A class implementa a interface IDisposable , mas eu não sei se isso é parte do que o til (~) é usado.

~ é o destruidor

  1. Os destruidores são chamados automaticamente e não podem ser chamados explicitamente.
  2. Os destruidores não podem ser sobrecarregados. Assim, uma class pode ter, no máximo, um destruidor.
  3. Destrutores não são herdados. Assim, uma class não possui destruidores além do que pode ser declarado nela.
  4. Os destruidores não podem ser usados ​​com estruturas. Eles são usados ​​apenas com classs. Uma instância se torna elegível para destruição quando não é mais possível que qualquer código use a instância.
  5. A execução do destruidor da instância pode ocorrer a qualquer momento após a instância se tornar elegível para destruição.
  6. Quando uma instância é destruída, os destruidores em sua cadeia de inheritance são chamados, em ordem, da maioria derivada para a menos derivada.

Finalizar

Em C #, o método Finalize executa as operações que um destruidor C ++ padrão faria. Em C #, você não o nomeia Finalizar – você usa a syntax do destruidor de C ++ para colocar um símbolo de til (~) antes do nome da class.

Descarte

É preferível descartar objects em um método Close() ou Dispose() que pode ser chamado explicitamente pelo usuário da class. Finalize (destructor) são chamados pelo GC.

A interface IDisposable informa ao mundo que sua class mantém os resources que precisam ser descartados e fornece aos usuários uma maneira de liberá-los. Se você precisar implementar um finalizador em sua class, seu método Dispose deve usar o método GC.SuppressFinalize() para garantir que a finalização de 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 resources não gerenciados preciosos (como identificadores de arquivo) que deseja fechar e descartar o mais rápido possível, deverá implementar a interface IDisposable.

Este é um finalizador . Para ser honesto, você raramente precisa escrever um finalizador. Você realmente só precisa escrever um se:

  • Você tem access direto a um recurso não gerenciado (por exemplo, através de um IntPtr ) e não pode usar o SafeHandle que facilita
  • Você está implementando IDisposable em uma class que não está selada. (Minha preferência é selar classs, a menos que elas sejam projetadas para inheritance.) Um finalizador é parte do padrão canônico Dispose em tais casos.

É usado para indicar o destruidor da class.

O mesmo que C ++, é o destruidor; no entanto, em c # você não o chamou explicitamente, ele é invocado quando o object é coletado.

Veja Destrutores (Guia de Programação C #) . Esteja ciente, no entanto, que, ao contrário 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 de um object morrer.

Aqui está uma descrição dos desconstrutores C # que encontrei