Что выведет код Junior GC, IDisposable и производительность обновлено

Порядок вызова Dispose

Вопрос

Что выведет программа (.NET 8)? По строке на каждый вывод.

using (var a = new Res("A"))
using (var b = new Res("B"))
{
    Console.WriteLine("body");
}
using var c = new Res("C");
Console.WriteLine("end");

class Res : IDisposable
{
    private readonly string _n;
    public Res(string n) { _n = n; Console.WriteLine("open " + n); }
    public void Dispose() => Console.WriteLine("close " + _n);
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: open A, open B, body, close B, close A, open C, end, close C. Вложенные using освобождают ресурсы в обратном порядке: сначала B, потом A. using-объявление using var c живёт до конца области видимости, то есть до конца программы: close C печатается после end.

Что выведет

open A
open B
body
close B
close A
open C
end
close C

Разбор

Вложенные using освобождают ресурсы в обратном порядке: сначала B, потом A. using-объявление using var c живёт до конца области видимости, то есть до конца программы: close C печатается после end.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.