正確實作 IDisposable
使用者報告在其程式碼庫中實作 IDisposable 時遇到程式碼分析錯誤。為了理解這個問題,讓我們檢查一下提供的程式碼:
public class User : IDisposable { // ... public void Dispose() { // Clear property values id = 0; name = String.Empty; pass = String.Empty; } }
錯誤訊息 CA1063 表示 IDisposable 實作不正確。根據 Microsoft 的文檔,如果您的類別擁有非託管資源或對一次性物件的引用,則只需實作 IDisposable。在給定的程式碼片段中,沒有聲明的屬性需要處置。
要解決此問題,更正的實作將是:
public class User : IDisposable { // ... public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // In this case, there are no managed resources to dispose } // Also, there are no unmanaged resources to dispose } }
此實作的主要區別在於它對 protected 的使用Dispose 方法上的關鍵字。這確保只有衍生類別可以使用 Dispose。 Dispose 方法中缺少任何清理程式碼是適當的,因為類別本身不會保存任何一次性資源。
以上是不使用非託管資源時如何正確實作IDisposable?的詳細內容。更多資訊請關注PHP中文網其他相關文章!