IDisposable
IDisposable задаёт метод
Dispose.
Конструкция using вызывает его
в конце блока, даже при исключении.
Для асинхронного закрытия есть
IAsyncDisposable.
Синтаксис
using (IDisposable resource = new Gate())
{
}
Пример
Давайте закрыть Gate через using:
using System;
class Gate : IDisposable
{
public bool Closed { get; private set; }
public void Dispose()
{
Closed = true;
}
}
class Program
{
static void Main()
{
Gate gate;
using (gate = new Gate())
{
}
Console.WriteLine(gate.Closed);
}
}
Результат выполнения кода:
True
Пример
Давайте проверить флаг до выхода из using:
using System;
class Gate : IDisposable
{
public bool Closed { get; private set; }
public void Dispose()
{
Closed = true;
}
}
class Program
{
static void Main()
{
using (Gate gate = new Gate())
{
Console.WriteLine(gate.Closed);
}
}
}
Результат выполнения кода:
False
Пример
Давайте использовать современный using:
using System;
class Gate : IDisposable
{
public bool Closed { get; private set; }
public void Dispose()
{
Closed = true;
}
}
class Program
{
static void Main()
{
using Gate gate = new Gate();
Console.WriteLine(gate.Closed);
}
}
Результат выполнения кода:
False
Смотрите также
-
Dispose,
закрыть ресурс -
IAsyncDisposable,
асинхронное закрытие -
DisposeAsync,
метод асинхронного закрытия -
ref struct,
тип без упаковки