Sobes.tech
Junior — Middle

Poderia explicar o propósito da interface IDisposable e como usá-la na gestão de recursos?

sobes.tech IA

Resposta da IA

A interface IDisposable em C# destina-se a libertar recursos não geridos, como descritores de ficheiros, ligações a bases de dados, sockets, etc. Ela contém um método Dispose() que é chamado para libertar explicitamente os recursos.

O uso de IDisposable permite controlar o momento em que os recursos são libertados, o que é importante para evitar fugas.

Exemplo de uso:

class ResourceHolder : IDisposable
{
    private bool disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

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

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

Também é comum usar a construção using, que chama automaticamente Dispose():

using(var resource = new ResourceHolder())
{
    // trabalhar com o recurso
}
// Aqui, Dispose() é chamado automaticamente

Assim, IDisposable ajuda a gerir corretamente os recursos e a evitar fugas.