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接口,这样我们可以在垃圾回收器前通过强制方式释放我们的对象。