Подтвердить что ты не робот

Оператор "using" всегда удаляет объект?

Является ли оператор using всегда распоряжаться объектом, даже если в нем есть возврат или исключение? То есть:.

using (var myClassInstance = new MyClass())
{
    // ...
    return;
}

или

using (var myClassInstance = new MyClass())
{
    // ...
    throw new UnexplainedAndAnnoyingException();
}
4b9b3361

Ответ 1

Да, это все. Он компилируется до:

SomeDisposableType obj = new SomeDisposableType();
try
{
    // use obj
}
finally
{
    if (obj != null) 
        ((IDisposable)obj).Dispose();
}

Будьте осторожны с вашей терминологией здесь; сам объект не освобождается. Вызывается метод Dispose() и, как правило, освобождаются неуправляемые ресурсы.

Ответ 2

Если объект реализует IDisposable, он будет вызываться.

Из с использованием Statement (С# Reference)

Определяет область, за пределами которой объект или объекты будут расположены.

Оператор using позволяет программисту указывать, когда объекты, которые ресурсы должны освобождать их. Объект, предоставленный для использования оператор должен реализовать интерфейс IDisposable. Этот интерфейс предоставляет метод Dispose, который должен освобождать объект ресурсы.