Passer des classes par valeur et pas par reference!

tarkil Messages postés 2 Date d'inscription dimanche 29 octobre 2000 Statut Membre Dernière intervention 23 janvier 2004 - 23 janv. 2004 à 01:09
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 23 janv. 2004 à 05:44
Bonjour,

Je voudrais recopier les données d'une instance de classe (notons la "1") dans une autre instance (notons la "2").
J'utilise Instance2 = Instance1;
Cependant, par défaut, C# utilise le passage par référence entre classes! Du coup, si 1 est modifié, alors 2 l'est aussi, ce que je ne veux pas!

Quelqu'un a t'il une solution SVP ?
Merci.

Tarkil...

2 réponses

cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
23 janv. 2004 à 05:43
Bonjour,

pour les variables ValueType (int, double, struct,...) nous avons le choix de passer par valeur (par défaut) ou bien par référence (modificateur ref)
pour les variavles ReferenceType (classes) SEUL le passage par référence est prévu !

Un contournement est possible
munir la classe à dupliquer d'une méthode publique Clone
qui en interne invoquera MemberwiseClone (protégée)
Attention tout de même car cette dernière méthode fait une "shallow copie" .
Elle va dupliquer les champs ValueTypes mais duplique uniquement les références sur les champs ReferenceType
Il faut alors traiter ceux ci récursivement.
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
23 janv. 2004 à 05:44
bien sûr,

il faut passer ensuite la référence sur le Clone
0
Rejoignez-nous