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










注:.net 内部也有传说中的”析构函数“,就是 Finalize(), 该函数由GC自动调用。
实现 Dispose 需要注意的是
1. 如果资源已手动释放过了,就应该通知GC,不要再对该对象执行 Finalize 操作
2. 确保重复执行 Dispose 时不会出错
根据以上规则, 简单的定义一个类 classSample























































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





换一个





小技巧: 可使用 using 关键字来定义对象的生存期,
超出 using范围 后,如果对象实现了IDisposable接口, 系统会自动调用其 Dispose 方法, 是不是很方便。



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