我正在開發一個.NET項目,它需要與一些用戶定義的類進行交互 - 被改爲「作業」。所有工作類別必須實現特定的接口IJob
,以便庫消耗它們。有時候一個工作類可能擁有非託管資源,這需要明確處理。我應該如何確保處理可能的一次性物品?
我應該如何確保所有工作在使用後妥善處理,如果我事先不知道工作是否需要明確處置?我有幾個想法我自己,而是想聽聽您的意見/建議:
讓
IJob : IDisposable
,迫使所有的工作來實現Dispose()
方法。這將允許我在using
塊中處理工作,但由於大多數工作是而不是預計需要明確處置,這可能會增加客戶開發人員不必要的困惑。是否涉及作業的所有工作
try-finally
塊,並用finally
,以確保如果作業實現IDisposable
是Dispose()
被調用。這使得客戶更容易實施新的工作職位 - 不必實施空的方法 - 但它也隱藏了圖書館知道並關心一次性工作的事實。
寫這篇後,我趨向於向解決方案#1瘦,但我仍然認爲這將是很好看的替代解決方案,以及額外的優點/缺點兩個我心中已經有了。
好點。但是,大部分流都需要處理,我希望只有少數工作需要處理。 – 2009-12-29 17:51:25
在我看來'System.Web.IHttpModule'也需要它的實現者提供'Dispose()'方法,儘管只有少數模塊(恕我直言)需要它。我想這爲#1提供了額外的優先權。 – 2009-12-29 17:54:50
+1,我認爲,爲Job提供一個標準化的方法來清理它使用的是合理的。通過使用'IDisposable',您可以從框架支持中受益,並且最終用戶至少可以考慮在何處放置適當的清理代碼。 – user7116 2009-12-29 18:00:14