Finalize, Dispose浅解

 

1.相同点:都是进行垃圾回收的接口。GC只能回收托管内存,非托管内存需要自己实现回收。

2.区别:Finalize为protected方法,外部不可见,且只能回收非托管资源(win32资源等)。clr在进行垃圾回收时,在回收无用对象的托管内存之前,会先调用该对象的Finalize方法(如果有的话),任何对象都不能调用别的对象的Finalize方法,只能调用自己或者基类的Finalize方法;Dispose则用于被外部或用户调用,可以自行选择回收托管或非托管资源(往往用于回收所有资源),很多时候Dispose方法等同于该类的Close方法,即具备Dispose方法的类都有对应的Close方法,自己实现的话最好也同是实现以上两种方法。

3.强调:以上两种方法在回收托管与非托管资源时的不同,不进行手动垃圾回收时,托管资源由clr回收。

示例代码:

1.Dispose接口应用

ContractedBlock.gif ExpandedBlockStart.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 



 

转载于:https://www.cnblogs.com/Fairyvoice/archive/2008/10/29/1322053.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值