我一直在研究标准的 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);
}
}
我真的需要在这里释放托管资源吗?
Thanks,
如果你的班级有任何IDisposable
实例,您正在使用托管资源,因此您应该实施IDisposable
允许用户处置资源。你的Dispose
方法应该调用Dispose
在托管资源上。
至于释放托管内存,您不需要执行任何操作。这是由 GC 处理的,但这是由 GC 处理的唯一清理部分。托管和非托管资源必须通过以下方式清理:Dispose
和/或终结器。
如果您不使用任何托管或非托管资源,则无需实现IDisposable
也不是终结器。实现终结器实际上会影响类型的性能,因此除非需要,否则不要实现它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)