IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

C# Discussion :

Evenement sur clear


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 899
    Points : 85
    Points
    85
    Par défaut Evenement sur clear
    Bonjour,


    à l'appel de ln.Clear , la méthode Dispose et le destructeur ne sontappeller à ce moment là.
    Comment on fais ?
    Je veux intercepter un evenement lors d'un remove ou d'un clear sur la liste d'objjet 'test'
    Le destructeur est appeller à la fin du programme mais en aucun cas sur le ln.Clear , pourtant Clear nettoie la liste et libére l'objet 'test' .......

    Code : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace dispose1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<test> ln = new List<test>();
                for (int i = 0;i<10;i++)
                {
                    test ts = new test();
                    ts.set(i + 1);
                    ln.Add(ts);
                }
                ln.Clear();
                ln = null;
            }
        }
        internal class test : IDisposable
        {
            private int i;
            internal test()
            {
     
            }
            ~test()
            {
                set(0);
            }
     
            internal void set(int a)
            {
                i = a;
            }
            internal int get()
            {
                return i;
            }
     
            #region IDisposable Support
            private bool disposedValue = false; // To detect redundant calls
     
            protected virtual void Dispose(bool disposing)
            {
                if (!disposedValue)
                {
                    if (disposing)
                    {
                        // TODO: dispose managed state (managed objects).
                    }
     
                    // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                    // TODO: set large fields to null.
     
                    disposedValue = true;
                }
            }
     
            // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
            // ~test() {
            //   // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
            //   Dispose(false);
            // }
     
            // This code added to correctly implement the disposable pattern.
            public void Dispose()
            {
                // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
                Dispose(true);
                // TODO: uncomment the following line if the finalizer is overridden above.
                // GC.SuppressFinalize(this);
            }
            #endregion
        }
    }
    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Je crois que ton objet est détruit quand le Garbage collector passe et voit qu'il n'y a plus de référence à cet objet ou si tu l'utilises dans une instruction Using.
    Tu peux sinon utiliser une ObservableCollection t'as des événements sur les changements de la collection ou créer ta propre collection ...

  3. #3
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Il faudrait savoir ce que tu souhaite obtenir. Le finaliseur sera appelé à la discrétion du Garbage Collector, quand il jugera utile de libérer la mémoire. Quant à la méthode Dispose() elle doit être appelée explicitement, ce que fait le pattern using en coulisse ; si tu veux être sûr qu'elle soit appelée lorsque tu vide la liste il te faut le faire toi-même avant, tant que tu as les références (tu peux éventuellement passer par un tableau temporaire). Sinon, comme le suggère youtpout978, avec une ObservableCollection tu auras l'événement CollectionChanged avec la liste des objets retirés de la liste et appeler le Dispose à ce moment là.

    Par ailleurs ton implémentation du pattern Disposable n'est pas correcte, c'est le code commenté qui l'est. D'ailleurs à quoi te sert d’appeler set(0); dans le finaliseur ?

Discussions similaires

  1. [C#] Evenement sur classe virtual
    Par papouAlain dans le forum Windows Forms
    Réponses: 26
    Dernier message: 11/01/2005, 12h45
  2. Evenement sur UPDATE, INSERT, DELETE
    Par papouAlain dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2004, 15h58
  3. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 14h56
  4. Evenement sur les barres de défilement d'une ScrollBox
    Par Nico118 dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/05/2004, 15h56
  5. [FLASH MX 2004] [ecouteur] evenements sur un clip
    Par marco_ dans le forum Flash
    Réponses: 2
    Dernier message: 30/04/2004, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo