首頁 >後端開發 >C++ >不使用非託管資源時如何正確實作IDisposable?

不使用非託管資源時如何正確實作IDisposable?

Barbara Streisand
Barbara Streisand原創
2025-01-05 12:48:40285瀏覽

How to Correctly Implement IDisposable When No Unmanaged Resources Are Used?

正確實作 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn