使用IDisposable 進行狀態管理
在C 中,常見的模式涉及使用A 類的構造函數和析構函數來處理進入進入和退出條件對於B 類,確保離開範圍時處於已知狀態。這不是純粹的 RAII,而是一種既定做法。
在 C# 中,可以透過 using 和 IDisposable 使用類似的方法。然而,這種用法引發了一個問題:
問題:使用 using 和 IDisposable 作為獲取「範圍行為」以實現異常安全的手段是否濫用?
答案:
有些意見認為 using 和 IDisposable 的這種用法是一種虐待。原因如下:
例如,考慮以下內容代碼:
{ // Unlock the frobble this.Frobble.Unlock(); try { // May throw Foo(); this.Frobble.Fiddle(); Bar(); } finally { // Lock the frobble this.Frobble.Lock(); } }
此代碼容易出現解鎖後但進入 try 區塊之前拋出的異常將使 frobble 解鎖的問題。使用using來處理這種狀態變化會使該漏洞更難以檢測。
因此,通常建議將using用於資源管理的預期目的,並避免將其用於狀態管理。
以上是在 C# 中使用「using」和「IDisposable」進行狀態管理是否屬於濫用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!