尝试了解何时需要实现 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");
这个类是否需要实现 IDisposable,因为它有一个托管资源 (FileStream),该资源持有一个非托管资源(文件)?或者我不需要实现 IDisposable 因为我正在班级内进行清理?
使困惑。
对于实现的任何类型的每个实例IDisposable
并且可能以一种不平凡的方式这样做,它必须在每时每刻都可以确定该实例将如何Dispose
d.在大多数情况下,这意味着每个IDisposable
实例将有一个明确定义的所有者,负责调用Dispose
。在这种情况下FileStream
由类创建的实例,您的类是所有者,因为没有其他人能够Dispose
it.
具有引用字段的类IDisposable
他们拥有的实例几乎总是应该实现IDisposable
,并使用他们的Dispose
方法Dispose
the IDisposable
他们拥有的物品。你们班有这样一个场;因此,它应该实施IDisposable
.
只要有可能,就应该设计一个需要清理的类,以便调用IDisposable.Dispose
就足以执行任何可能需要的此类清理。在某些情况下,不使用其他方法来执行清理可能是不切实际的,但这种情况非常罕见。如果可以设计一个类Dispose
将负责所有必要的清理工作,人们应该这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)