我們有構造函數,我們可以將它們視爲對象實例化的合同。爲什麼沒有處理合同?
沒有其他的方法來創建一個實例,但沒有爲構造函數提供一組精確的參數。
但是,我們如何(我們應該打擾)執行一些驗前活動? 我們已經有終結器,但不推薦用於通用終結。 我們也有IDisposable
來執行。但是,如果我們使用不帶using
的一次性物品,我們無法保證Dispose永遠不會被調用。
爲什麼現在有辦法強制對象的某些狀態,然後纔會放開?
因爲不能保證對象圖是完整的,並且死亡對象的引用對象還沒有被GC取消,所以在終結器中進行添加是不可能的。
當然,客戶端代碼不會調用實例對象的SaveState()
會給它帶來一些麻煩,而不是我的對象。
儘管如此,要求在構造函數中注入所有需要的依賴項(如果沒有默認值可用)被認爲是一種好的做法。沒人願意說:「如果對象處於無效狀態,則保留默認構造函數,創建屬性並拋出異常。」
更新:
由於有關閉我想說的是一些設計模式,這也可能是一個答案的問題很多選票。
無論您是否使用DI,您都可以計算請求/創建對象的次數。但是,如果沒有明確的釋放調用,則不知道應該調用處置的時刻。
我根本不明白如何在正確的時間實施處置。
這樣的合同是不可能執行的。 – SLaks
這聽起來更像是一個咆哮,而不是一個問題。 –
做一個完整的一次性模式(與終結者作爲備份)是最接近你可以得到:http://www.codeproject.com/Articles/15360/Implementing-IDisposable-and-the-Dispose-Pattern-P – Thorarin