【发布时间】:2009-07-16 08:33:49
【问题描述】:
此类使用StreamWriter,因此实现了IDisposable。
public class Foo : IDisposable
{
private StreamWriter _Writer;
public Foo (String path)
{
// here happens something along the lines of:
FileStream fileWrite = File.Open (path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
_Writer = new StreamWriter (fileWrite, new ASCIIEncoding ());
}
public void Dispose ()
{
Dispose (true);
GC.SuppressFinalize (this);
}
~Foo()
{
Dispose (false);
}
protected virtual void Dispose (bool disposing)
{
if (_Disposed) {
return;
}
if (disposing) {
_Writer.Dispose ();
}
_Writer = null;
_Disposed = true;
}
private bool _Disposed;
}
}
当前的实现有什么问题吗?即,我是否必须手动释放底层FileStream? Dispose(bool)写对了吗?
【问题讨论】:
-
在调用 Dispose 之前不要忘记检查并确保 _Writer 不为空。您的 Dispose 必须能够容忍多次调用而不会失败。
-
其实他先检查_Disposed,所以没问题(虽然不是线程安全的)。
-
@mafutrct:有更新的答案。
-
附加问题:
_Dispoed = true不应该只在disposing == true时执行吗?
标签: c# idisposable