Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Copie d'objets [ Archives / Au secours ] (MyXiLo)

dimanche 26 février 2006 à 16:29:30 | Copie d'objets

MyXiLo

Bonjour,

J'ai un petit soucie avec les copies d'objets: Lorsque je copie un objet et que je modifie la copie ca modifie la source egalement.

Concretement:
MonObject Source=new MonObjet;
MonObjet Copie=Source;
Copie.UneFonction();


Si UneFonction modifie l'objet alors Copie sera modifie, evidement, mais egalement Source. Ce qui est tres handicapant. Je me suis dit que ce devait etre une regle inherente au C# - bien qu'etant tout a fait etonne.

J'ai donc resteste avec un objet de base du C#:
string Source = "ACDE";
string Copie= Base;          
Copie.Insert(1, "B");


Et, bien entendu, Source vaut "ACDE" à la fin de l'exemple.

Je ne comprends pas pourquoi cela se deroule ainsi avec ma classe utilisateur. Si vous avez une idee sur la question je serai ravi de l'entendre.

Par avance, merci,
Thomas.

dimanche 26 février 2006 à 16:31:10 | Re : Copie d'objets

MyXiLo

Dans mon deuxième exemple, ce n'est pas "string Copie= Base;" mais "string Copie = Source;"

dimanche 26 février 2006 à 17:08:46 | Re : Copie d'objets

coq

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

Oula attention.
Ton test n'est pas valide à cause du caractère spécial de la classe String en .Net : elle est immuable, toute opération sur une chaine ne modifie pas la chaine mais retourne une nouvelle instance avec le résultat.
Donc c'est normal que ton test sur string soit valide, jette un coup d'oeil à la doc de String.Insert.

Dans ton code, si MonObject est un type référence (ce qui est la cas de toute classe), quand tu fais :
MonObject Source=new MonObjet();
MonObjet Copie=Source;

tu obtient 2 références, Source et Copie (qui en l'occcurence n'en est pas une), au même objet, celui résultant de new MonObject();, et non pas 2 objets distincts.

Tu devrais implémenter ICloneable sur ta classe et te servir de la méthode Clone que tu auras développée afin d'obtenir une copie réelle de ton objet.


/*
coq
MVP Visual C#
*/

dimanche 26 février 2006 à 17:14:19 | Re : Copie d'objets

Bidou

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
En fait en C#, les lignes suivantes

MonObject Source = new MonObjet;
MonObjet Copie = Source;

font simplement pointer la variable "Source" et "Copie" sur le même emplacement mémoire. C'est à dire que si tu modifies l'une ou l'autre variable, tu modifies toutes les références qui pointent sur cet emplacement.
Pour avoir une nouvelle instance (un autre emplacement mémoire) il faut faire un clône (avec la méthode MemberwiseClone() [clonage superficiel]). Si cette méthode n'est pas disponible, alors il faut implémenter la chose soit-même en créant un nouvel object (avec le "new") et en copiant tout le contenu de ton object dans la nouvelle variable.




[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever

dimanche 26 février 2006 à 17:16:08 | Re : Copie d'objets

Bidou

Administrateur CodeS-SourceS
Me suis fait eu... pour changer! (et tjrs par le même )



[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever

dimanche 26 février 2006 à 17:17:45 | Re : Copie d'objets

coq

Administrateur CodeS-SourceS
lol



/*
coq
MVP Visual C#
*/

dimanche 26 février 2006 à 17:20:45 | Re : Copie d'objets

MyXiLo

Bonjour a vous deux et merci. Je vais me pencher sur ICloneable.

Bonne journée,
Thomas.




Cette discussion est classé dans : objet, copie, source, objets, modifie


Répondre à ce message

Sujets en rapport avec ce message

Copier un tableau d'objet [ par redpooka ] J'ai un tableau A, et un tableau B.Le tableau A contient des objets.J'ai besoin de copier le tableau A en B.Or si je modifie les objets du tableau B c Multi threading en while(true) sur un objet [ par Sobieski ] Salut,J'ai un petit problème.J'ai deux taches à faire en même temps, des taches d'écoute en boucle infinie while(true).J'ai donc décidé d'en faire cha Copie de repertoires avec source et destination ayant une racine differente [ par hetneo ] Bonjour,Je pense que le titre du sujet est parlant .. lolEn fait j'utilise Directory.Move(source, dest) Ma source est sur C: et ma destination sur D: quelques exemples d'objets [ par mathmax ] Bonjour,Je cherche quelques bon exemple de programme pour bien comprendre la programmation objet. Il me faudrait des programmes si possible simples et COPIE D OBJET DANS UN TABLEAU [ par dam5978 ] Bonjour a tous!!Voila je cherche a copier un objet(de type double) dans un tableau, (de sorte que je puisse l afficher dans un messageBox(avec la méth trier une bindingsource. [ par mathmax ] Bonjour,J'ai un objet de type BindingSource contenant une liste d'objets. J'aimerais pouvoir le trier selon une certaine propriété des objets de la li objet COM en .net ou Python ? le meilleur ? [ par leromantique6 ] Bonjour,J'ai a nouveau une petite question ..Voila j'ai des objets COM en python, on me demande de les convertir en .NET. J'aurai aimé savoir quelles Liste d'objets [ par loumirak ] Bonjour.J'ai un probleme avec l'objet de type List.Quand j'affiche apres plusieurs insertions (Add) alors le nombre d'elements est le bon, mais tous l Des objets dans un tableau [ par redpooka ] J'ai un tableau d'objet. Et dans ce tableau toutes les cases ne sont pas pris par un objet. Comment faire pour tester si dans la case il y a bien un o copie d'un fichier d'un répertoire vers un autre [ par Thanos_the_yopper ] j'imagine que ca doit être tout con, mais comment qu'on fait ?Final Fantasy Memories Venez découvrir les origines d'une saga


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.