el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
11 juil. 2005 à 09:34
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
11 juil. 2005 à 10:36
Bonjour,
je ne comprend pas, j'ai une classe collection "col_Historique" (System.Collections.CollectionBase)
qui
contient des objets de ma classe "Historique". Jusqu'à là pas de
problème.
Dans les déclarations de ma form1, je déclare :
public col_Historique ma_col_historique = new col_Historique();
public
col_Historique ma_col_historique_recherchee = new col_Historique();
pour pouvoir travailler sur le deuxième sans toucher au contenu du premier.
Avant de travailler sur le 2ème, je copie le 1er(qui contient les objets) dans le 2ème :
ma_col_historique_recherchee = ma_col_historique;
Le pb arrive lorsque je veux supprimer une occurence de la deuxième collection
ma_col_historique_recherchee.delete_fichier(mon_fichier);
appelle ceci :
public void delete_fichier(Historique mon_fichier)
{
for (int i=0; i<this.Count;i++)
{
if (mon_fichier == this.List[i])
{
this.RemoveAt(i);
break;
}
}
}
Il me supprime aussi l'occurence dans la première collection !
Pourtant, c'est bien un THIS.RemoveAt que je fais, donc le this devrait
cibler la collection ma_col_historique_recherchee et pas les deux collections. C'est comme ci les deux collections étaient en miroir pour comparer avec deux disques durs
taoetc
Messages postés346Date d'inscriptionlundi 8 septembre 2003StatutMembreDernière intervention 3 septembre 20073 11 juil. 2005 à 09:44
Quand tu fais un objet = objet, il te copie le lien et ne duplique pas l'objet en mémoire,
il te faut peut etre redéfinir l'opérateur égale, ou alors crée une fonction duplicate ou copy dans ta classe
Miiitch
Messages postés52Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention24 août 20051 11 juil. 2005 à 09:44
C'est simple: les objets fonctionnent par référence: quand tu ecris ma_col_historique_recherchee
= ma_col_historique; tu ne copies pas l'objet, tu copies seulement sa
reference. donc tes 2 variables pointent vers le meme objet. Si
tu veux copier ton objet, il faut que tu fasses toi meme la fonction de
copie. Regarde du coté de l'interface ICloneable, ca peut t'aider aussi.
Miiitch
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 11 juil. 2005 à 10:21
OK, c vrai que c pas bête, j'ai regardé du côté de [ICloneable], je
pense qu'il faut le mettre juste avant la classe, mais j'ai déjà
[Serializable] j'espère que c'est cummulable.
Sinon, au moment de faire le clonage, j'ai vu qu'il y a la méthode clone, mais je sais pas trop comment l'utilser.
public col_Historique duplicate(col_Historique ma_col)
{
}
Ma fonction retourne le même type d'objet, je n'ai plus qu'à
faire le clonage, mais je ne trouve pas .clone() dans la liste de choix
sur ma_col.[???]
Miiitch
Messages postés52Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention24 août 20051 11 juil. 2005 à 10:30
Il faut aussi que tes données a l'interieur de ta collection possedent
une methode pour les copier si ce sont des objets, sinon si ce sont des
structures ou des types simples , tu peux utiliser l'operateur =
Miiitch
Vous n’avez pas trouvé la réponse que vous recherchez ?
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 11 juil. 2005 à 10:36
Bon, en fait, je n'ai pas réussi à faire fonctionner l'interface
ICloneable, il me dit qu'il manque une directive using, alors que cela
n'a besoin que de system, bref.
je copie tous les objets de col1 à col2 comme ceci :
public col_Historique duplicate()
{
col_Historique nouvelle_col = new col_Historique();