我正在寫一個相當大的API,並且對我應該如何實現IDisposable感到困惑。在一個簡化的場景中:在API中實現IDisposable
我在我的一個類中有一個Socket(稱爲A),這顯然需要處理,但是該類只有內部構造函數,因此我的用戶只能創建一個實例通過創建更高級別對象的實例(稱爲B),該實例將反過來實例化A並從而獲得新對象A的所有權。
我的直覺暗示了使對象A和B都可以使用當用戶在他們的應用程序中處理我們擁有的對象B時,A被丟棄並且套接字也被正確處置。但是,由於這是一個API,它將允許我的用戶在不處置擁有對象B的情況下處理對象A和套接字,因此可能會導致他們自己遇到一些重大問題。
那麼我該如何繼續?至於我可以看到我唯一的選擇是不好的選擇:
- 實現IDisposable直覺將有它,並告訴我的用戶不被文檔中愚蠢的。 (非常差)
- 實現IDisposable直覺會有,但以防萬一,添加一些可怕的處置檢查整個應用程序/例外(雖然在我的應用程序配置整個小節的情況將是致命的應用反正)。
- 只在對象B中實現IDisposable,而是添加一個內部的Dispose方法來安全地處理A和套接字。 (看似最好的主意)
我不太確定我是否有其他選擇,所以我真的希望有人能爲我提供建議。
謝謝。
你看過「使用」塊的選項嗎?它會通過在內部調用Idisposible來做同樣的事情 – DinoMyte
明顯的方法是向A中添加一個內部Close()方法.B可以在其Dispose()方法中調用它。 –
選項3似乎是最好的 – Viru