如果我有以下情况:
StreamWriter MySW = null;
try
{
Stream MyStream = new FileStream("asdf.txt");
MySW = new StreamWriter(MyStream);
MySW.Write("blah");
}
finally
{
if (MySW != null)
{
MySW.Flush();
MySW.Close();
MySW.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
MySW.Dispose()即使提供了,我可以打电话并跳过关闭吗?是否存在任何不能按预期工作的Stream implament(如CryptoStream)?
如果没有,那么以下只是错误的代码:
using (StreamWriter MySW = new StreamWriter(MyStream))
{
MySW.Write("Blah");
}
Run Code Online (Sandbox Code Playgroud)
Bin*_*ier 81
我可以调用MySW.Dispose()并跳过关闭即使提供了吗?
是的,这就是它的用途.
是否有任何Stream实现无法按预期工作(如CryptoStream)?
可以安全地假设,如果一个对象实现IDisposable,它将正确处置自己.
如果没有,那就是一个bug.
如果没有,那么以下只是错误的代码:
不,该代码是处理实现对象的推荐方法IDisposable.
更好的信息在接受和关闭的答案中- 可以打电话给谁?
And*_*are 58
我使用了Reflector,发现它System.IO.Stream.Dispose看起来像这样:
public void Dispose()
{
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
Sco*_*ttS 21
正如丹尼尔布鲁克纳所提到的,Dispose和Close实际上是一回事.
但是当Stream处理/关闭时,Stream不会调用Flush().FileStream(我假设任何其他具有缓存机制的Stream)在处理时调用Flush().
如果要扩展Stream或MemoryStream等,则需要在处理/关闭时实现对Flush()的调用.
| 归档时间: |
|
| 查看次数: |
41106 次 |
| 最近记录: |