Bonjour...

Dans ma cervelle de poison rouge, j'ai une classe que est dérivée de object avec pleins de fonctions et de variables...
J'ai les fonctions membres Clone() et Dispose()

Exemple :
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
 
public class Test
{
     string mName;
     int mValue;
 
     public Test()
     {
           mName = string.Empty;
           mValue = 0;
     }
 
     public Test(string name, int value)
     {
           mName = name;
           mValue = value;
     }
 
     public void Dispose()
     {
           mName = string.Empty;
           mValue = 0;
     }
 
     public object Clone()
     {
           return this.MemberwiseClone();
     }    
 
     public string Name
     {...}
 
     public int Value
     {...}
C'est une classe d'exemple...

J'ai une autre classe qui utilise "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
 
public class HistoireDe
{
private List<Test> mListe;
 
public HistoireDe()
{
    mListe = new List<Test>();
}
 
public List<Test> Collection
{
    get {return mListe;}
}
 
private void Truc()
{
       mListe.Add(new Test());
       mListe.Add(new Test("A",1));
       mListe.Add(new Test("B",2));
}
 
public object Clone()
{
      return this.MemberwiseClone();
}
 
public void Dispose()
{
      if (mListe.Count() > 0)
      {
          for(int c = 0; c < mListe.Count();c++)
          {
             mListe[c].Dispose();
          }
 
          mListe.Clear();
          mListe == null;
      }
}
Jusqu'à la, je peux acceder à mes données de mListe. No soucy...

Puis je fais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
List<Test> TestCollection = (...) "Classe de HistoireDe".Collection.Clone();
J'ai bien ma copie de la collection.

Puis quand je veux effacer ma classe "Classe de HistoireDe" (parce que j'en ai plus besion), je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"Classe de HistoireDe".Dispose();
Et là , oh miracle, mes données de TestCollection sont détruites... (Qui sont normalement indépendantes de "Classe de HistoireDe"...)

Dans ma cervelle de moineau, cela me paraît logique, mais pour C#, il en va tout autrement...
Donc, je veux détruire "Classe de HistoireDe" car j'en ai plus besoin et garder mes données de TestCollection.

Mais lorsque j'appelle Dispose() de "Classe de HistoireDe", ça détruit aussi les données de TestCollection. Poutant, j'ai fais théoriquement une copie de mes d onnées par Clone(). Cela devrait rendre indépendant mes données de "Classe de HistoireDe" et TestCollection.

Auriez-vous une explication à ce truc ?

Cordialement,

Davy