IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

ICloneable et Clone()


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut ICloneable et Clone()
    Bonjour,

    J'ai un petit soucis avec la methode Clone(). J'essaye de cloner ma classe mais a chaque fois ma copie et modifier en même temps que l'original.

    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
     
     
    public Classik(double[][] claciik)
            {
                _data = claciik;
            }
     
     
     public object Clone()
            {
                return MemberwiseClone();
            }
     
    Classik t78 = new Classik(left);
                Classik m7 = t78.Clone() as Classik;
     
                t78[0, 0] = 7822;
     
    // mes deux variable sont modifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     public object Clone()
            {
                Classik c = new Classik(_data);
    return c;
     
            }
    // pareil elle sont toute les deux modifiées.
    Je ne vois pas comment faire à part créer une struct a la place de class mais je sais que c'est possible de cloner mais j'ai pas la moindre idée de mon erreur.

    Merci

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Quand tu crées ton objet copie, ton tableau est passé par référence. Donc tu as bien deux objets Classik différents, mais qui partagent le même tableau (Même référence).

    Donc quand tu modifies le tableau de l'un, le deuxième objet qui référence les même tableau subira les mêmes modifications. Je te conseille donc :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public object Clone()
    {
        double[][] clonedArray = (double[][]) _data.Clone();
        return new Classik(clonedArray );
    }
    Par contre, quand tu poste un bout de code évite les noms bidons/qui se ressemble,t c'est le meilleur moyen de perdre ton lecteur.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2005, 12h51
  2. Clone Matlab
    Par devmat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 30/04/2005, 16h44
  3. [VB.NET] DataTable.Clone ne veut rien savoir
    Par anthony70 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/12/2004, 19h57
  4. [C#] Question sur ICloneable
    Par Oberown dans le forum C#
    Réponses: 2
    Dernier message: 07/09/2004, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo