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?

Foi útil?

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

  1. liberar o recurso referenciado por handle
  2. set handle para 0 para ter certeza

faria tipo de movimento juntamente com a noção de "não", bem ...:)

i pode estar errado embora ...

greetz

back2dos

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