Truc bizarre avec Clone() et Dispose()
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:
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:
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:
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:
"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