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 :

copie maison, memberswiseclone et Icloneable [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut copie maison, memberswiseclone et Icloneable
    Salut,

    je suis en train de me former à C# et il y un truc que je n'arrive pas à comprendre.

    J'ai bien capté la différence entre les types valeur et les types référence (pile / tas). J'ai compris que objet1 = objet2 ne faisait que de la copie de référence et que la modification des données (stockées sur le tas) de l'une des références impacte l'autre.

    Concernant la copie d'objet, j'ai compris que MemberwiseClone faisait une copie superficielle des données (copie bit à bit des types valeur uniquement)...

    Voici dans le bouquin que je bosse la définition de l'intérêt de ICloneable:Clone :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Pers : ICloneable {
     
      public string prenom;
      public int age;
      public Pers conjoint;
     
      public object Clone()
      {
        Pers p = (Pers)MemberwiseClone();
        if (conjoint != null) p.conjoint = (Pers)conjoint.Clone();
        return p;
      }
    }
    Quel est dans ce cas l'intérêt de redéfinir Clone de ICloneable, alors que j'aurais pu créer une méthode personnelle (sans interfacer ICloneable) comme celle qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Pers {
     
      public string prenom;
      public int age;
      public Pers conjoint;
     
      public object monCloneAMoi()
      {
        Pers p = (Pers)MemberwiseClone();
        if (conjoint != null) p.conjoint = (Pers)conjoint.monCloneAMoi();
        return p;
      }
    }
    Merci de votre aide à ma compréhension !

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    L'intérêt est d'implémenter l'interface ICloneable... Mais tu n'es peut-être pas encore arrivé au chapitre interfaces dans ton bouquin.

    Et si ce n'est pas dans ton bouquin, tu pourras trouver de la documentation sur notre site.

  3. #3
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    en effet, les interfaces arrivent après... quel suspense ! ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. File Copy maison
    Par swif79 dans le forum C#
    Réponses: 5
    Dernier message: 20/01/2010, 11h42
  2. Copie d'objet sans IClonable
    Par Invité dans le forum C#
    Réponses: 4
    Dernier message: 25/05/2007, 08h48
  3. Protéger une disquette contre la copie
    Par benzaza dans le forum Assembleur
    Réponses: 20
    Dernier message: 16/01/2005, 10h42
  4. Copie de fichier
    Par Bjorn dans le forum C
    Réponses: 4
    Dernier message: 11/06/2002, 15h23
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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