在streamwriter,streamreader 之前使用声明的好处/使用
可能重复:
什么是C#Using块,我为什么要使用它?
所以我刚才注意到在msdn示例和一些stackoverflow问题中有回答,其中using语句在streamwriter等之前使用,但实际上有什么好处呢? 因为我从未被教过/告知/读过任何使用它的理由。
using (StreamReader sr = new StreamReader(path)) { while (sr.Peek() >= 0) Console.WriteLine(sr.ReadLine()); }
代替:
StreamReader sr = new StreamReader(path); while (sr.Peek() >= 0) Console.WriteLine(sr.ReadLine());
using块调用自动使用的对象的Dispose
方法,好处是保证可以调用它。 因此,无论事件是否在语句块中抛出exception,都会处置该对象。 它被编译成:
{ StreamReader sr = new StreamReader(path); try { while (sr.Peek() >= 0) Console.WriteLine(sr.ReadLine()); } finally { if(sr != null) sr.Dispose(); } }
额外的花括号用于限制sr
的范围,因此无法从using块的外部访问它。
使用提供了方便的语法,可确保正确使用IDisposable对象。 它被编译成:
StreamReader sr = new StreamReader(path); try { while (sr.Peek() >= 0) Console.WriteLine(sr.ReadLine()); } finally { sr.Dispose(); }
如MSDN上所述
using语句适用于实现IDisposable接口的东西。
.net将保证StreamReader将被处置。
您不必担心进一步关闭或管理它:只需在“使用”范围内使用您需要的内容。
它会自动为您调用StreamReader.Dispose()
方法。 如果您选择不使用using
关键字,则在运行代码块后最终会得到一个打开的流。 如果你想保留一个文件(等)继续使用,这是有益的,但如果你不打算在完成时手动处理它,可能是不好的做法。