Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Créer un compteur pour connaitre le nombre d'instance d'une classe
    Bonjour pour les besoins de mon projet,

    j'ai besoin de savoir combien d'élément d'une classe il existe dans tout mon projet.

    J'ai donc placé une variable statique
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    static int compteur


    que j'incrémente à chaque création.

    Bon maintenant je dois décrémenter ce compteur à chaque destruction.

    Etant plutôt un programmeur en C++, je veux le mettre dans le destructeur.
    Mais on me dit que cela ne se fait pas trop de modifier le destructeur en C#.

    Y-a-t-il une autre fonction qui serait appelé par défaut par le destructeur?

    Merci de toute aide.

    L'elfe d'Azur

  2. #2
    Membre émérite
    Etant donné que c'est une variable statique, cela devrait aller en la modifiant dans le destructeur.

    Mais je me trompe peut-être.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre confirmé
    Je viens de lire dans mon book (lu en biais)
    si tu met un destructeur, ca equivaut à réécrire Finalize()
    du coup, ton object survivra à la premiere collecte du GC.

    En clair, c'est juste qu'il mettra plus de temps que les autres objets à etre détruit. Mais comme de toute facon, on ne controle pas le moment où l'objet est détruit.... j'aurai tendance à dire qu'on s'en moque un peu...

  4. #4
    Expert éminent sénior
    Implémenter l'interface IDisposable pour vos objets et décrémentez, de manière thread-safe, votre compteur static dans la méthode Dispose.
    Regardez la documentation pour que l'objet n'ait pas à passer par le finalizer quand il a déjà été "disposé".
    Une décrémentation dans le finalizer, en cas de non appel à Dispose, pour les têtes en l'air ou les feignants, devrait aussi exister.

  5. #5
    Membre du Club
    Merci pour vos réponses,

    je vais essayer de regarder un peu plus la documentation sur IDisposable pour voir ci cela peut me convenir.

  6. #6
    Expert éminent
    Un truc genre ça quoi ?
    Code c# :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
            class Machin : IDisposable
            {
                static int instance_count = 0;
                private bool disposed = false;
     
                public Machin()
                {
                    System.Threading.Interlocked.Increment(ref instance_count);
                }
     
                public static int InstanceCount
                {
                    get { return instance_count; }
                }
     
                public void Dispose()
                {
                    Dispose(true);
     
                    GC.SuppressFinalize(this);
                }
     
                private void Dispose(bool disposing)
                {
                    if (!this.disposed)
                    {
                        System.Threading.Interlocked.Decrement(ref instance_count);
     
                        disposed = true;
     
                    }
                }
     
                ~Machin()
                {
                    Dispose(false);
                }
            }

###raw>template_hook.ano_emploi###