0
点赞
收藏
分享

微信扫一扫

正确实现 IDisposable 接口

虽然 .net 有垃圾回收机制(GC), 可自动进行大部分的资源清理工作,但开发人员仍旧应该养成良好的通过手动调用资源清理方法来进行资源回收的习惯, 让对象实现 IDisposable 接口正是 M$ 所推荐的, 该接口的原型为:

 注:.net 内部也有传说中的”析构函数“,就是 ​Finalize()​, 该函数由GC自动调用。


实现 Dispose 需要注意的是

1. 如果资源已手动释放过了,就应该通知GC,不要再对该对象执行 Finalize 操作

2. 确保重复执行 Dispose 时不会出错


根据以上规则, 简单的定义一个类 classSample

注意 protected void Dispose(bool disposing) 函数, 清理托管资源和非托管资源的代码位置不要写反了,否则当一个托管对象已经被GC回收后,再去调用它的Dispose 方法, 系统会触发一个 ObjectDisposedException 异常


到这里 ,一个简单的实现 IDisposable 的类已经写好了, 再写段测试代码看看

点击按钮, 再关闭程序, 可看到 output 窗口中显示 对象被销毁正确实现 IDisposable 接口_dataset_07 说明  Finalize 函数被执行了


换一个


小技巧: 可使用 using 关键字来定义对象的生存期,

超出 using范围 后,如果对象实现了 IDisposable接口, 系统会自动调用其 Dispose 方法, 是不是很方便。

看,我并没有调用 Dispose 方法, output 窗口中还会显示 ”手动销毁对象“.

举报

相关推荐

0 条评论