La mise en œuvre de IDisposable correctement

Dans mes classes, j'en œuvre IDisposable comme suit:

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;
    }
}

Dans VS2012, mon Analyse de Code dit de mettre en œuvre IDisposable correctement, mais je ne suis pas sûr de ce que j'ai fait de mal ici.

Le texte exact est comme suit:

CA1063 mettre en Œuvre IDisposable Fournir correctement une substituables mise en œuvre de dispose(bool) sur "l'Utilisateur" ou la marque, le type scellé. Un appel à Disposer(faux) ne doit nettoyer ressources autochtones. Un appel à Disposer(true) permet de nettoyer à la fois réussi et ressources autochtones. stman de l'Utilisateur.cs 10

Pour référence: CA1063: mettre en Œuvre IDisposable correctement

J'ai lu cette page, mais j'ai peur de ne pas vraiment comprendre ce qui doit être fait ici.

Si quelqu'un peut expliquer plus en lamens termes quel est le problème et/ou comment IDisposable devraient être mises en œuvre, qui va vraiment aider!

  • C'est que tout le code à l'intérieur de Dispose?
  • Avez-vous regarder l'exemple de code fourni dans le lien que vous avez posté?
  • Il est le IDisposable pattern que vous devez utiliser / étudier. Je suis sûr que vous aurez beaucoup de réponses avec des détails bientôt, mais, fondamentalement, il consiste à GC.SupressFinalize() et destructeur etc.
  • Vous devez mettre en œuvre votre méthode dispose() pour appeler la méthode dispose() sur l'un des membres de votre classe. Aucun de ces membres ont une. Vous devez donc pas mise en œuvre IDisposable. Réinitialiser les valeurs de propriété est inutile.
  • Vous avez seulement besoin de mettre en œuvre IDispoable si vous avez des ressources non managées aliéner (cela inclut les ressources non managées sont enveloppés (SqlConnection, FileStream, etc.). Vous n'avez pas et ne devrait pas mise en œuvre IDisposable si vous n'avez géré des ressources comme ici. C'est, IMO, un problème majeur avec l'analyse de code. Il est très bon à la vérification de silly peu de règles, mais pas très bon pour la vérification des erreurs conceptuelles.
  • C'est assez bouleversant pour moi que certaines personnes préfèrent downvote et de voir cette question fermée que de tenter d'aider une personne qui a mal compris un concept. Quelle honte.
  • il y a déjà de matériels volumineux sur en ce qui concerne le modèle Jetable. Même dans les réponses à cette question, il y a de subtiles exemples de la mauvaise compréhension du modèle. Il est beaucoup mieux pour point d'avenir questionneurs de la première concerne DONC, la question (qui a 309 upvotes).
  • Afin de ne pas downvote, ne pas upvote, laisser le poste à zéro et de fermer la question avec un utile pointeur.

InformationsquelleAutor Ortund | 2013-08-20