Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1050 of 1492 menu
◀ ▶

Dispose

Dispose у IDisposable должен быть идемпотентным: повторный вызов не бросает. После закрытия метод может бросить ObjectDisposedException. using вызывает Dispose автоматически.

Синтаксис

resource.Dispose();

Пример

Давайте вызвать Dispose дважды:

using System; class Gate : IDisposable { public bool Closed { get; private set; } public void Dispose() { Closed = true; } } class Program { static void Main() { Gate gate = new Gate(); gate.Dispose(); gate.Dispose(); Console.WriteLine("abcde"); } }

Результат выполнения кода:

"abcde"

Пример

Давайте поймаем ObjectDisposedException:

using System; class Gate : IDisposable { public bool Closed { get; private set; } public void Work() { if (Closed) { throw new ObjectDisposedException(nameof(Gate)); } } public void Dispose() { Closed = true; } } class Program { static void Main() { Gate gate = new Gate(); gate.Dispose(); try { gate.Work(); } catch (ObjectDisposedException) { Console.WriteLine("fail"); } } }

Результат выполнения кода:

"fail"

Пример

Давайте проверить флаг после Dispose:

using System; class Gate : IDisposable { public bool Closed { get; private set; } public void Dispose() { Closed = true; } } class Program { static void Main() { Gate gate = new Gate(); gate.Dispose(); Console.WriteLine(gate.Closed); } }

Результат выполнения кода:

True

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить