1.相同点:都是进行垃圾回收的接口。GC只能回收托管内存,非托管内存需要自己实现回收。
2.区别:Finalize为protected方法,外部不可见,且只能回收非托管资源(win32资源等)。clr在进行垃圾回收时,在回收无用对象的托管内存之前,会先调用该对象的Finalize方法(如果有的话),任何对象都不能调用别的对象的Finalize方法,只能调用自己或者基类的Finalize方法;Dispose则用于被外部或用户调用,可以自行选择回收托管或非托管资源(往往用于回收所有资源),很多时候Dispose方法等同于该类的Close方法,即具备Dispose方法的类都有对应的Close方法,自己实现的话最好也同是实现以上两种方法。
3.强调:以上两种方法在回收托管与非托管资源时的不同,不进行手动垃圾回收时,托管资源由clr回收。
示例代码:
1.Dispose接口应用
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1 public class Trash : IDisposable
2 {
3 //indicate whether this object has been disposed,
4 //ganrentee the Dispose method to be invoked only once
5 private bool disposed = false;
6
7 public void Dispose()
8 {
9 this.Dispose(true);
10 GC.SuppressFinalize(this);
11 }
12
13 public virtual void Dispose(bool totalDispose)
14 {
15 if (!this.disposed)
16 return;
17 //indicate whether collect managed resource
18 if (totalDispose)
19 {
20 //Dispose all managed resource;
21 }
22
23 //Dispose all unmanaged resource;
24 }
25
26 ~Trash()
27 {
28 this.Dispose(false);
29 }
30