{ 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解决方式是相同的。这个强制转换是必须的因为这是一个通用解决方式。
|
正在阅读:C#中的异常处理(二)C#中的异常处理(二)
2004-02-14 09:34
出处:PConline
责任编辑:linjixiong
键盘也能翻页,试试“← →”键