Вложенный ресурс в C#
Сложный объект часто содержит другой объект с ресурсом внутри.
Если поле реализует IDisposable, внешний
Dispose должен вызвать Dispose
у вложенного. Иначе внутренний ресурс останется
открытым, хотя внешний объект уже «закрыли».
Внутренний класс закроет свой ресурс:
using (Outer outer = new Outer()) {
Console.WriteLine("working");
}
class Inner : IDisposable {
public void Dispose() {
Console.WriteLine("inner closed");
}
}
class Outer : IDisposable {
private Inner inner = new Inner();
public void Dispose() {
inner.Dispose();
Console.WriteLine("outer closed");
}
}
Сделайте InnerPort и OuterHub
с явным освобождением. OuterHub при
завершении работы должен освободить InnerPort.
Используйте OuterHub в блоке с автоматическим
освобождением и проверьте, что на экране сначала
рабочее сообщение, затем закрытие внутренней части,
потом внешней.