.net垃圾收集(待续)

析构函数与IDisposable接口

一、析构函数

.net的析构函数代码会被编译在Finalize()中

protected override void Finalize()

{

    try

    {

            //destructor implementation

    }

    finally

   {

            base.Finalize();

   }

}

在.Net中,析够函数很少被使用,因为

   1. 执行时间不确定,如果对象占用重要资源,则不能及时释放。与C++中不同,C#的析构函数不会在删除对象时立即执行,它依赖于垃圾收集器的工作方式。

   2. 它会延迟对象最终从内存中删除的时间,没有析构函数的对象会在第一次垃圾收集时从内存中删除,而有析构函数的对象则需要两次处理才能删除。

二、IDisposable接口

    在C#中,推荐使用IDisposable接口替代析构函数。IDisposable接口定义了一个模式,为释放未托管资源提供了确定的机制。

   使用方式

   1. 使用try...catch,确保调用Dispose();

  2. 使用using语句,在using语句作用域之外,Dispose()会被自动调用

      using(SomeClass myclass = new SomeClass())  { //doing your process }

三、书中推荐的使用方法

      实现IDisposable接口,同时使用析构函数,把析构函数作用一种预防机制,以防没有调用Dispose()。

     例子参见C#高级编程第四版。

    

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值