一次性使用模式

时间:2009-02-04 22:27:41

标签: c#

  using (FileStream fileStream = new FileStream(path))
  {
    // do something
  }

现在我知道using模式是IDisposable的一个实现,即设置了Try / Catch / Finally并在对象上调用Dispose。我的问题是如何处理Close方法。

MSDN说它没有被调用,但我已经读过了。

我知道FileStream是从Stream继承的,解释为here。现在说不要覆盖Close(),因为它是由Dispose()调用的。

所以有些类只是在Dispose()方法中调用Close()或者使用调用Close()吗?

5 个答案:

答案 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()。你也应该这样做。