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接口,這樣我們可以在垃圾回收器前通過強制方式釋放我們的對象。