正在阅读:C#中的异常处理(二)C#中的异常处理(二)

2004-02-14 09:34 出处:PConline 作者:ivsee/CSDN 责任编辑:linjixiong
    {
        reader.Read(source, 0, length);
    }
    return source;
  }
   Reader将会被恰当的关闭。简单说来,using语句有大量的特征能够改善开始的“理想”版本。首先,我们看一下它内在的运行机制到底是怎样的。

  using语句转换

    C#ECMA标准描述using声明:
  using (type variable = initialization)
    embeddedStatement
  它等同于
  {
    type variable = initialization;
    try
    {
        embeddedStatement
    }
    finally
    {
        if (variable != null)
        {
            ((IDisposable)variable).Dispose();
        }
    }
  }
  它依赖于System命名空间中的IDisposable接口:
  namespace System
  {
    public interface IDisposable
    {
        void Dispose();
    }
  }
    注意:finally程序块中的牵制转换意味着,这个变量必须是一个支持IDisposable接口的类(通过继承或转换操作)。如果它不是,你就会得到一个编译时错误。

  using TextReader 转换

   不出乎意料,TextReader支持IDisposable接口,并且实现了Dispose来调用关闭。这意味着:
  using (TextReader reader = file.OpenText())
  {
    reader.Read(source, 0, length);
  }
  相当于下面:
  {
    TextReader reader = file.OpenText();
    try
    {
        reader.Read(source, 0, length);
    }
    finally
    {
        if (reader != null)
        {
            ((IDisposable)reader).Dispose();
        }
    }
  }
   除了对IDisposable的强制转换外,这和最通用的Java解决方式是相同的。这个强制转换是必须的因为这是一个通用解决方式。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品