Sobes.tech
Back to questions
Middle+
2

Для чего нужен IDisposable?

Companies where asked
Gravilink

Answer from AI

sobes.tech AI

Интерфейс IDisposable в C# используется для освобождения неуправляемых ресурсов, таких как файловые дескрипторы, сетевые соединения или объекты COM, когда они больше не нужны.

Реализуя IDisposable, класс предоставляет метод Dispose(), который вызывается для явного освобождения ресурсов, предотвращая утечки памяти и другие проблемы.

Пример использования:

public class ResourceHolder : IDisposable
{
    private bool disposed = false;
    private SafeHandle resource = new SafeFileHandle(IntPtr.Zero, true);

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

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // Освобождение управляемых ресурсов
                resource?.Dispose();
            }
            // Освобождение неуправляемых ресурсов
            disposed = true;
        }
    }

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

Такой подход гарантирует корректное освобождение ресурсов как при явном вызове Dispose(), так и при сборке мусора.