【发布时间】:2009-09-15 07:54:15
【问题描述】:
我一直在研究标准的 Dispose 模式,我只是想知道我需要写什么来释放托管资源?如果这些资源已经被“管理”,那么我肯定不需要做任何事情。
如果是这种情况,并且我的类不包含任何非托管资源(因此不需要由 GC 完成),那么我是否只需要在我的 Dispose 方法中禁止完成? :-
public void Dispose()
{
GC.SuppressFinalize(this);
}
所以假设这是我的班级:
public sealed class MyClass : IDisposable
{
IList<MyObject> objects; // MyObject doesn't hold any unmanaged resource
private bool _disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!_disposed)
{
// do I need to set the list to null and
// call Dispose on each item in the list?
if (disposing)
{
foreach (var o in objects)
o.Dispose();
objects = null;
}
}
_disposed = true;
}
~MyClass()
{
Dispose(false);
}
}
我真的需要在这里释放托管资源吗?
谢谢,
【问题讨论】:
标签: c# design-patterns dispose