当明确处理所有成员时,类是否需要实现IDisposable?

O.O*_*O.O 2 c# idisposable .net-2.0

试图理解何时需要实现IDisposable:

我写了一个小例子.

  public class FileManager
  {
    private FileStream fileStream;
    public void OpenFile(string path)
    {
       this.fileStream = File.Open(path, FileMode.Open, FileAccess.Read);
    }
    public void CloseFile(string path)
    {
      if ( this.fileStream != null && this.fileStream.CanRead)
      {
        this.fileStream.Close();          
      }
      this.fileStream.Dispose();
    }
  }

// client
var manager = new FileManager();
manager.Open("path");
manager.Close("path");
Run Code Online (Sandbox Code Playgroud)

此类是否需要实现IDisposable,因为它具有托管资源(FileStream),该资源保存在非托管资源(文件)上?或者我不必实现IDisposable,因为我在课堂上清理?

困惑.

sup*_*cat 5

对于IDisposable以非平凡的方式实现和可能实现的任何类型的每个实例,它必须在每个时刻都能够识别该实例将如何变为Disposed.在大多数情况下,这意味着每个IDisposable实例都有一个明确定义的所有者,负责调用Dispose.对于FileStream由类创建的实例,您的类是所有者,因为其他任何东西都不能Dispose.

具有引用它们拥有的IDisposable实例的字段的类几乎总是要实现,并将它们的方法用于它们拥有的对象.你的班级有这样一个领域; 因此应该实施.IDisposableDisposeDisposeIDisposableIDisposable

只要有可能,应该设计一个需要清理的类,以便调用IDisposable.Dispose它就足以执行可能需要的任何和所有这样的清理.在某些情况下,在不使用其他方法的情况下执行清理可能是不切实际的,但这些情况非常罕见.如果一个人可以设计一个班级Dispose来处理所有必要的清理工作,那么就应该这样做.