Sobes.tech
Junior — Middle

Pode explicar o que se entende por padrão Dispose na programação?

sobes.tech IA

Resposta da IA

O padrão Dispose na programação, especialmente em C#, é utilizado para libertar corretamente recursos não geridos (por exemplo, descritores de ficheiros, ligações a bases de dados, sockets), que não são controlados pelo recolhedor de lixo.

Em C#, para isso, implementa-se a interface IDisposable, que contém o método Dispose(). A chamada a este método liberta explicitamente os recursos quando o objeto já não é necessário.

Exemplo de uso:

class ResourceHolder : IDisposable
{
    private bool disposed = false;
    private IntPtr unmanagedResource; // exemplo de recurso não gerido

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // impede a chamada ao finalizador
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // Libertar recursos geridos
            }
            // Libertar recursos não geridos
            CloseHandle(unmanagedResource);
            unmanagedResource = IntPtr.Zero;
            disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}

Assim, o padrão Dispose ajuda a controlar o momento de libertação de recursos e previne fugas de memória ou bloqueios.