C# 实现IDisposable接口是否会将对象移动到Finalize列表?

C# 实现IDisposable接口是否会将对象移动到Finalize列表?,c#,clr,clr4.0,C#,Clr,Clr4.0,我现在正在阅读CLR(4.0)上的Dispose和Finalize方法 我不明白 如果我将Finalize(~className1)的实现添加到我的代码=>中,那么Finalize列表将具有指向托管堆中的对象实例的指针 现在,假设我没有实现Finalize(~className2),我只是在我的代码上实现了IDisposable接口——这个对象是否会有Finalize列表中的指针 否。如果对象没有终结器,它将不在终结队列中 参考: 垃圾收集器跟踪具有Finalize方法的对象。。。每次应用程序创

我现在正在阅读CLR(4.0)上的Dispose和Finalize方法 我不明白

如果我将Finalize(~className1)的实现添加到我的代码=>中,那么Finalize列表将具有指向托管堆中的对象实例的指针


现在,假设我没有实现Finalize(~className2),我只是在我的代码上实现了IDisposable接口——这个对象是否会有Finalize列表中的指针

否。如果对象没有终结器,它将不在终结队列中

参考:

垃圾收集器跟踪具有Finalize方法的对象。。。每次应用程序创建具有Finalize方法的对象时,垃圾收集器都会在Finalize队列中放置一个指向该对象的条目


基本上,对象存在的时间越长,垃圾收集器检查代码中是否仍引用它的次数就越少。这意味着未使用的对象通常仍然可以在内存中,尽管它们已经很长时间没有被引用了。此外,如果要显式地告诉对象清理其资源,请使用Dispose方法。我建议在其实现中调用GC.SuppressFinalize(this),并在终结器中调用Dispose方法。这样,如果用户忘记调用Dispose(这不应该发生,但也可能发生),对象的资源最终会被释放。

但是Dispose是调用Finalize方法还是只是对对象进行“清理”?Finalize方法调用的一部分
Dispose
,而不是相反。无法实际调用finalize方法。