Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про C#: idisposable, dispose, finalize, pattern

Что такое паттерн IDisposable, как работают методы Dispose и блок Finalize?

Проверяет знание шаблона очистки неуправляемых ресурсов в .NET.

Короткий ответ

IDisposable реализуют классы, владеющие неуправляемыми ресурсами (файлы, сокеты). Метод Dispose() вызывается вручную или через using для немедленного освобождения. Finalize (деструктор) запускается GC при сборке, если Dispose не был вызван, но не гарантирует время выполнения. Реализация часто сочетает оба: в finalizer’е вызывают Dispose(false), а в Dispose() — GC.SuppressFinalize(this).

Длинный ответ

Dispose Pattern:

public class ResourceHolder : IDisposable {
  	private bool _disposed;
  	public void Dispose() { Dispose(true); GC.SuppressFinalize(this); }
  	protected virtual void Dispose(bool disposing) {
    	if (!_disposed) {
      		if (disposing) {
        		// освобождаем управляемые ресурсы
      		}
      		// освобождаем неуправляемые ресурсы
      		_disposed = true;
   		}
  	}
  	~ResourceHolder() { Dispose(false); }
}

Dispose():

  • Освобождает ресурсы сразу, вызывается явно или через using.

Finalize:

  • Вызывается финализатором GC, если не вызван Dispose.

  • Работает неопределённо поздно, дорогостоящая операция.

Вывод:

Используйте using и Dispose для предсказуемого освобождения; finalizer — страховка.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • C#

    C#

Ключевые слова

#idisposable

#dispose

#finalize

#pattern

Подпишись на C# Developer в телеграм