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,因为我在课堂上清理?
困惑.
对于IDisposable以非平凡的方式实现和可能实现的任何类型的每个实例,它必须在每个时刻都能够识别该实例将如何变为Disposed.在大多数情况下,这意味着每个IDisposable实例都有一个明确定义的所有者,负责调用Dispose.对于FileStream由类创建的实例,您的类是所有者,因为其他任何东西都不能Dispose.
具有引用它们拥有的IDisposable实例的字段的类几乎总是要实现,并将它们的方法用于它们拥有的对象.你的班级有这样一个领域; 因此应该实施.IDisposableDisposeDisposeIDisposableIDisposable
只要有可能,应该设计一个需要清理的类,以便调用IDisposable.Dispose它就足以执行可能需要的任何和所有这样的清理.在某些情况下,在不使用其他方法的情况下执行清理可能是不切实际的,但这些情况非常罕见.如果一个人可以设计一个班级Dispose来处理所有必要的清理工作,那么就应该这样做.