Sobes.tech
Назад к вопросам
Middle+
3

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

Компании, где спрашивали
Gravilink

Ответ от нейросети

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(), так и при сборке мусора.