In my classes I implement IDisposable
as follows:
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;
}
}
In VS2012, my Code Analysis says to implement IDisposable correctly, but I'm not sure what I've done wrong here.
The exact text is as follows:
CA1063 Implement IDisposable correctly Provide an overridable implementation of Dispose(bool) on 'User' or mark the type as sealed. A call to Dispose(false) should only clean up native resources. A call to Dispose(true) should clean up both managed and native resources. stman User.cs 10
For reference: CA1063: Implement IDisposable correctly
I've read through this page, but I'm afraid I don't really understand what needs to be done here.
If anyone can explain in more layman's terms what the problem is and/or how IDisposable
should be implemented, that will really help!
Dispose
? – HeerlenIDisposable pattern
that you should use / investigate. I am sure you will get lots of answers with details soon but basically it involvesGC.SupressFinalize()
and destructor etc. – DeputyIDispoable
if you have unmanaged resources to dispose of (this includes unmanaged resources that are wrapped (SqlConnection
,FileStream
, etc.). You do not and should not implementIDisposable
if you only have managed resources such as here. This is, IMO, a major problem with code analysis. It's very good at checking silly little rules, but not good at checking conceptual errors. – Coenosarc