我一直在查看标准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);
}
}
我是否需要在这里释放托管资源?
谢谢。
IDisposable
才能调用SuppressFinalize
。 - LukeH