C# 使用,它将在链式 instantiation/method 调用中处理多少变量

C# using, how many variables it will dispose in a chained instantiation/method calls

快速搜索后没有出现类似问题,因此提出这个问题。 只是想知道将调用哪些处理方法以及调用顺序是什么?

using(var bar = new FooDisposable().Bar())
{
    //Will this using call both (IFooDisposable.Dispose and IBarDisposable.Dispose) the dispose methods?
}

public class FooDisposable : IFooDisposable 
{
    public IBarDisposable Bar()
    {
        return new ImplOfIBarDisposable();
    }
}

public interface IFooDisposable : IDisposable
{
    IBarDisposable Bar();
}

public interface IBarDisposable : IDisposable
{   
}

只有 IBarDisposable 会调用其 Dispose()

This MSDN article 很有帮助。

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

变成

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}