私のクラスでは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
場合のみです。
- 管理されていないリソースがあります
- それ自体が使い捨てのものへの参照を保持しています。
投稿したコードには破棄する必要のあるものはありません。
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.
}
}