Гарантированное освобождение в блоке в C#
Вручную вызывать Dispose перед каждым
return неудобно и легко забыть ветку.
Блок using оборачивает объект в скобки:
using (var room = new Room()) { ... }.
При выходе из блока среда вызовет Dispose
автоматически. Так освобождение привязано
к границе блока, а не к каждой строке вручную.
Класс Room закроет ресурс в Dispose:
using (Room room = new Room()) {
Console.WriteLine(room.open);
}
Console.WriteLine("after block");
class Room : IDisposable {
public bool open = true;
public void Dispose() {
open = false;
Console.WriteLine("room closed");
}
}
Оформите класс Scope с явным освобождением
ресурса и используйте его внутри ограниченного
блока, как в примере урока. После блока выведите
строку, подтверждающую продолжение программы.
Внутри блока выведите поле объекта, а после его конца убедитесь по сообщению на экране, что ресурс уже закрыт.