IDisposableを正しく実装する 質問する

IDisposableを正しく実装する 質問する

私のクラスではIDisposable次のように実装します。

public class User : IDisposable
{
    public int id { get; protected set; }
    public string name { get; protected set; }
    public string pass { get; protected set; }

    public User(int UserID)
    {
        id = UserID;
    }
    public User(string Username, string Password)
    {
        name = Username;
        pass = Password;
    }

    // Other functions go here...

    public void Dispose()
    {
        // Clear all property values that maybe have been set
        // when the class was instantiated
        id = 0;
        name = String.Empty;
        pass = String.Empty;
    }
}

VS2012 では、コード分析で IDisposable を正しく実装するように指示されていますが、ここで何を間違えたのかわかりません。
正確なテキストは次のとおりです。

CA1063 IDisposable を正しく実装する 'User' に Dispose(bool) のオーバーライド可能な実装を提供するか、型をシールとしてマークします。Dispose(false) の呼び出しはネイティブ リソースのみをクリーンアップする必要があります。Dispose(true) の呼び出しは、マネージ リソースとネイティブ リソースの両方をクリーンアップする必要があります。stman User.cs 10

参考のために:CA1063: IDisposable を正しく実装する

このページを読みましたが、ここで何をする必要があるのか​​よくわかりません。

問題が何であるか、またどのようにIDisposable実装すべきかを、もっとわかりやすい言葉で説明していただけると、本当に助かります。

ベストアンサー1

これは正しい実装ですが、投稿したコードでは破棄する必要があるものは何も見当たりません。実装する必要があるのは次のIDisposable場合のみです。

  1. 管理されていないリソースがあります
  2. それ自体が使い捨てのものへの参照を保持しています。

投稿したコードには破棄する必要のあるものはありません。

public class User : IDisposable
{
    public int id { get; protected set; }
    public string name { get; protected set; }
    public string pass { get; protected set; }

    public User(int userID)
    {
        id = userID;
    }
    public User(string Username, string Password)
    {
        name = Username;
        pass = Password;
    }

    // Other functions go here...

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing) 
        {
            // free managed resources
        }
        // free native resources if there are any.
    }
}

おすすめ記事