using (FileStream fileStream = new FileStream(path))
{
// do something
}
现在我知道using模式是IDisposable的一个实现,即设置了Try / Catch / Finally并在对象上调用Dispose。我的问题是如何处理Close方法。
MSDN说它没有被调用,但我已经读过了。
我知道FileStream是从Stream继承的,解释为here。现在说不要覆盖Close(),因为它是由Dispose()调用的。
所以有些类只是在Dispose()方法中调用Close()或者使用调用Close()吗?
答案 0 :(得分:18)
using
语句仅了解Dispose()
,Stream.Dispose
来电Close()
,documented in MSDN:
注意因为落后 兼容性要求,这个 方法的实现不同于 建议的指导 处理模式。这个方法叫 关闭,然后调用 Stream.Dispose(布尔型)。
答案 1 :(得分:7)
仅使用Dispose()调用。如果实现它的方式,Dispose()方法可能会调用Close()。
答案 2 :(得分:2)
Close()不是IDisposable接口的一部分,因此使用无法知道是否应该调用它。 using只会调用Dispose(),但智能设计的对象将在Dispose()方法中自行关闭。
答案 3 :(得分:1)
我不认为使用调用Close(),它无法知道它应该调用该特定函数。所以它必须是调用dispose,而这反过来调用close。
答案 4 :(得分:0)
在.Net类中,Close()调用Dispose()。你也应该这样做。