C#内存管理(九)

IDisposible

使用IDisposable接口的Dispose()方法做清理工作。因此如果我们有一个ResouceUser的类使用到了终结器(finalizer),如下:

public class ResourceUser {
  ~ResourceUser () // THIS IS A FINALIZER
  {
    // DO CLEANUP HERE
  }
}

那么我们可以使用IDisposable来实验同样的功能:

public class ResourceUser : IDisposable {
  #region IDisposable Members
  public void Dispose () {
    // CLEAN UP HERE!!!
  }
  #endregion
}

IDisposable已经被集成到了关键字中。在using()的最后Dispose()的代码块会被调用。对象不应该在Dispose()的代码块后被引用,因为它被标上了”gone”并且准备被垃圾回收器回收。

public static void DoSomething () {
  ResourceUser rec = new ResourceUser();
  using (rec) {
    // DO SOMETHING
  } // DISPOSE CALLED HERE
  // DON'T ACCESS rec HERE
}

我喜欢把代码放在using块内,这样所有的变量和资源在块结束后回被自动回收(主要是因为using关键字扩展了后是try … finally …, 而所有的具有IDisposable接口的对象的Dispose()方法会在finally的代码块中被自动调用)。

public static void DoSomething () {
  using (ResourceUser rec = new ResourceUser()) {
    // DO SOMETHING
  } // DISPOSE CALLED HERE
}

通过实现类的IDisposible接口,这样我们可以在垃圾回收器前通过强制方式释放我们的对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值