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 :
C'est une classe d'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 {...}
J'ai une autre classe qui utilise "Test" :
Jusqu'à la, je peux acceder à mes données de mListe. No soucy...
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; } }
Puis je fais ceci :
J'ai bien ma copie de la collection.
Code : Sélectionner tout - Visualiser dans une fenêtre à part List<Test> TestCollection = (...) "Classe de HistoireDe".Collection.Clone();
Puis quand je veux effacer ma classe "Classe de HistoireDe" (parce que j'en ai plus besion), je fais :
Et là , oh miracle, mes données de TestCollection sont détruites... (Qui sont normalement indépendantes de "Classe de HistoireDe"...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part "Classe de HistoireDe".Dispose();
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
Partager