idisposable是.net中乙個很重要的介面,一般用來釋放非託管資源,我們知道在使用了idisposable的物件之後一定要呼叫idisposable.dispose()方法,或者使用.net提供的關鍵字using來達到這一目的,如:
public void readfile()
}
使用using關鍵字後,編譯器將在他的末尾自動插入乙個dispose方法的呼叫。我們可以利用這一點嘗試完成下面的需求:
我們希望將警告的文字以紅色顯示在控制台上,然後再恢復初始顏色顯示其他文字內容。按照傳統做法,我們先儲存初始顏色,設定新顏色,向控制台輸出警告資訊,恢復初始顏色,輸出其他文字。
public void show()
如果利用我們前面分析的idisposable模式,我們先實現乙個能夠接收action型別的通用disposable:
public class disposableaction:idisposable
public void dispose()
}
進一步實現之前的需求
public void show()
console.writeline("other message");
}
這似乎也沒比上面高明多少,是因為這個例子不能夠展現這個模式的威力。在《三種觀察者模式的c#實現》一文中,我介紹的第三種方案是利用action來實現,而該文並沒有給出如何取消訂閱的方法。利用本文的內容將會實現乙個優雅的取消訂閱方案:
public idisposable onalarm(actionalarmaction)
如果想只訂閱一次,就使用using:
using (_clock.onalarm(data => ))
反之,如果不想取消訂閱就不要使用using,不要呼叫dispose()方法。 IDisposable的另類用法
idisposable是.net中乙個很重要的介面,一般用來釋放非託管資源,我們知道在使用了idisposable的物件之後一定要呼叫idisposable.dispose 方法,或者使用.net提供的關鍵字using來達到這一目的,如 public void readfile 使用using關鍵字...
C 物件的銷毀和IDisposable
1.物件的析構函式與finalize方法 與c 類似,c 允許程式設計師為類定義乙個 析構函式 class myclass 上面的 編譯後,可以看到 這裡呼叫了object類的finalize方法,這個方法裡面是空的,什麼也沒有。與建構函式類似,子類的析構函式會自動呼叫基類的析構函式,由此不斷上溯,...
C 物件的銷毀和IDisposable
1.物件的析構函式與finalize方法 與c 類似,c 允許程式設計師為類定義乙個 析構函式 class myclass 上面的 編譯後,可以看到 這裡呼叫了object類的finalize方法,這個方法裡面是空的,什麼也沒有。與建構函式類似,子類的析構函式會自動呼叫基類的析構函式,由此不斷上溯,...