两者都是为了释放非托管资源,如IO句柄、数据库连接等。
Finalize
基类Object定义了受保护的方法Finalize,垃圾回收器判定对象是垃圾后,会调用对象的Finalize方法(注意:重写的都会调用),定义:在类名前添加~,如~ClassName(){};
Finalize由GC隐式调用,它在垃圾对象回收完成后调用,使对象存活时间比正常长,应尽可能避免。
Dispose
类如果想允许使用者控制类所包装的本机资源的生存期,就必须实现IDisposable的Dispose方法,它是一种设计模式;
可以显示调用;
为了避免重复释放资源,在手动调用Dispose后,可以调用GC.SuppressFinalize禁止终结器的调用。