O que faz o caractere til (~) fazer aqui [duplicado]
Pergunta
Duplicate possíveis:
O que faz o til (~) significa em C #?
class ResourceWrapper
{
int handle = 0;
public ResourceWrapper()
{
handle = GetWindowsResource();
}
~ResourceWrapper() //this line here
{
FreeWindowsResource(handle);
handle = 0;
}
[DllImport("dll.dll")]
static extern int GetWindowsResource();
[DllImport("dll.dll")]
static extern void FreeWindowsResource(int handle);
}
O que o til fazer na linha indicada.
Eu pensei que era o bit a bit operador NOT, de facto eu realmente não entendo esse bloco inteiro lá, (a linha comentada e os parênteses blovk depois dela), não é um methd ou um parâmetro ou qualquer coisa, o que é e porque é que há um til antes dele?
Solução
É destructor . É preciso cuidado para que todos os recursos são liberados pela coleta de lixo.
Outras dicas
Este implementa o finalizador (o método Finalize) da classe. Normalmente você não deve implementar um finalizador.
por exemplo. fazer isso para as classes que detêm recursos não gerenciados externos, mas certifique-se de implementar o padrão IDisposable também neste caso.
Como em C ++, ~ClassName
é o método destruidor. Ele é chamado em C # quando o objeto em questão fica limpos pelo coletor de lixo. Ao contrário de C ++, onde há momentos determinísticos quando o destruidor é chamado, não há maneira de prever quando ele vai ser chamado (ou mesmo se ele será chamado) em C #.
O que você provavelmente está procurando é o padrão IDisposable
, que fornece uma abordagem muito melhor para isso.
Isso é um Destructor . Dá-lhe o controle implícito sobre liberação de recursos. Ou seja, ele é chamado pelo Garbage Collector . Se você quiser controle explícito sobre a liberação de recursos, você pode implementar IDisposable Confira Implementando Finalize e Dispose para limpar Unmanaged recursos . A Framework Design Guidelines também tem mais informações.
Ack, eu só encontrei a resposta e não pode ver como excluir minha pergunta. ele especifica o destruidor da classe
Eu não tenho nenhuma pista sobre C #, mas pelo que o código faz, isto parece um deconstructor, dizendo
- liberar o recurso referenciado por
handle
- set
handle
para0
para ter certeza
faria tipo de movimento juntamente com a noção de "não", bem ...:)
i pode estar errado embora ...
greetz
back2dos