【发布时间】:2013-01-23 22:44:40
【问题描述】:
我在 MSDN 上找到了以下代码:
public class DisposeExample
{
public class MyResource: IDisposable
{
private IntPtr handle;
private Component component = new Component();
private bool disposed = false;
public MyResource(IntPtr handle)
{
this.handle = handle;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if(!this.disposed)
{
if(disposing)
{
// Dispose managed resources.
component.Dispose();
}
CloseHandle(handle);
handle = IntPtr.Zero;
disposed = true;
}
}
~MyResource()
{
Dispose(false);
}
}
public static void Main()
{
MyResource obj = new MyResource()
//obj.dispose()
}
}
现在我的困惑是,如果我调用 obj.dispose,它会处理在 MyResources 类中创建的对象,即句柄、组件等。但是 obj 是否也会从堆中删除?同样适用于析构函数。如果我不调用 dispose,则有时会调用析构函数。析构函数中的代码删除了包含的对象。但是obj呢? 其次,如果我没有在类中定义析构函数并且我什至不调用 dispose,GC 是否永远不会出现在这里?
【问题讨论】:
标签: garbage-collection dispose idisposable finalize