Что выведет код 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 ошибок.