using System;
namespace Dispose_Throw
{
public class D : IDisposable
{
public D()
{
Console.WriteLine("D::Constructor");
}
public void Dispose()
{
Console.WriteLine("D::Dispose");
}
}
public class C : IDisposable
{
private D m = new D();
public void Dispose()
{
m.Dispose();
}
}
public class B : IDisposable
{
private C m = new C();
public void Dispose()
{
m.Dispose();
}
}
public class A : IDisposable
{
private B m=new B();
public void Dispose()
{
m.Dispose();
}
}
class Program
{
static void Main(string[] args)
{
using (A t = new A())
{
}
}
}
}
dXNpbmcgU3lzdGVtOwoKbmFtZXNwYWNlIERpc3Bvc2VfVGhyb3cKewogICAgcHVibGljIGNsYXNzIEQgOiBJRGlzcG9zYWJsZQogICAgewogICAgICAgIHB1YmxpYyBEKCkKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJEOjpDb25zdHJ1Y3RvciIpOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlKCkgCiAgICAgICAgewogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiRDo6RGlzcG9zZSIpOwogICAgICAgIH0KICAgIH0KICAgIHB1YmxpYyBjbGFzcyBDIDogSURpc3Bvc2FibGUKICAgIHsKICAgICAgICBwcml2YXRlIEQgbSA9IG5ldyBEKCk7CiAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZSgpCiAgICAgICAgewogICAgICAgICAgICBtLkRpc3Bvc2UoKTsKICAgICAgICB9CiAgICB9CiAgICBwdWJsaWMgY2xhc3MgQiA6IElEaXNwb3NhYmxlCiAgICB7CiAgICAgICAgcHJpdmF0ZSBDIG0gPSBuZXcgQygpOwogICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoKQogICAgICAgIHsKICAgICAgICAgICAgbS5EaXNwb3NlKCk7CiAgICAgICAgfQogICAgfQogICAgcHVibGljIGNsYXNzIEEgOiBJRGlzcG9zYWJsZQogICAgewogICAgICAgIHByaXZhdGUgQiBtPW5ldyBCKCk7CiAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZSgpCiAgICAgICAgewogICAgICAgICAgICBtLkRpc3Bvc2UoKTsKICAgICAgICB9CiAgICB9CiAgICBjbGFzcyBQcm9ncmFtCiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgdXNpbmcgKEEgdCA9IG5ldyBBKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo=