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 :

[interface] implementation de ICloneable


Sujet :

C#

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut [interface] implementation de ICloneable
    SAlut,

    je sais pas trop quoi mettre dans l'implementation de la seule methode de ICLoneable. A part un appel à la shallow copy :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            public Object Clone()
            {
                CMyClass<T> newGrid = (CMyClass<T>) this.MemberwiseClone();            
                return newGrid;
            }
    ma classe etant une collection générique, je sais pas vraiment comment traiter les future object du tableau interne...

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    C'est quoi la question ?

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    C'est quoi la question ?
    lol très juste...

    La question est la suivante : Suis-je assurer de recopier parfaitement n'importe quel type d'objet qui serait introduit dans ma class collection (de type CMyClass<TuChoisisLetype>) avec l'implementation presenté ci dessus ?

    Ou alors je doit obliger les objets contenu de ma collection à implementer aussi ICloneable et je l'appel sur tout les objet contenu durant le Clone.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Le problème de ICloneable, c'est qu'il n'y a aucune garantie de la façon dont sera "cloné" l'objet.

    Dans le cas d'une collection, seul l'objet collection en lui-même est cloné. Tous les items de la collection ne sont pas clônés via ICloneable.Clone : Clone de la collection ajoute uniquement une référence vers les anciens objets.

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    je vois de temps à autre des sujets sur ICloneable.
    Mais au fait à koi cela vous sert de cloner une classe ?

  6. #6
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    Citation Envoyé par ced600 Voir le message
    je vois de temps à autre des sujets sur ICloneable.
    Mais au fait à koi cela vous sert de cloner une classe ?
    c est l'instance de la classe que tu clones.

    Utilisé par moi meme comme "constructeur de recopie"

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Citation Envoyé par ZaaN Voir le message
    c est l'instance de la classe que tu clones.

    Utilisé par moi meme comme "constructeur de recopie"
    Oui oui j'ai écris trop vite. Ce que je me demandais, c'est à koi cela sert de cloner l'instance d'une classe ?

    En effet pour l'instant dans tous les développements que j'ai fait, je n'en ai pas eu besoin.

    J'ai certe pas encore une grande expérience en Déve (2 ans) mais j'étais entrain de me dire que cela ne sert pas à grand chose.

  8. #8
    Membre éprouvé Avatar de Nikoui
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Personnellement je m'en sert rarement aussi, mais je me souviens par exemple en avoir eu besoin lorsque je manipulait des streams qui étaient ensuite transmis lors d'un appel réseau (par un service WCF). Dans ce cas, j'étais obligé de cloner le stream pour pouvoir le transmettre sur le réseau et l'utiliser une fois reçu côté client.

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Le seul truc que je clone souvent, c'est des noeuds XML.

    Si je me trompe pas, ça clone aussi tous les Child, donc c'est utile...

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ok merci pour vos réponse à ma question.
    On va fermer la parenthèse que j'ai ouverte et revenir sur le problème de Zaan (vais qd même pas lui piquer son topics )

  11. #11
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Citation Envoyé par ZaaN Voir le message
    lol très juste...

    La question est la suivante : Suis-je assurer de recopier parfaitement n'importe quel type d'objet qui serait introduit dans ma class collection (de type CMyClass<TuChoisisLetype>) avec l'implementation presenté ci dessus ?

    Ou alors je doit obliger les objets contenu de ma collection à implementer aussi ICloneable et je l'appel sur tout les objet contenu durant le Clone.
    Il faut faire un deep clone pour les type complex
    .net icloneable deep clone

    IClonable est tres utile, par exemple quand tu veux faire du IEditableObject. Travail sur un model transactionnel.

  12. #12
    Membre expérimenté Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Par défaut
    Une solution serait d'implementer ta collection un peu comme ça :
    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
     
     
     
     
    public class CMyClass<T> where T:ICloneable : List
    {
            public Object Clone()
            {
                CMyClass<T> newGrid = (CMyClass<T>) this.MemberwiseClone(); 
                for(int i = 0; i < this.count;i++)
                {
                       newGrid[i] = this[i].Clone();
                }
                return newGrid;
            }
    }
    Enfin je crois, en fait, j'en sais strictement rien. Clone() créé bien une nouvelle instance d'un objet dans le même état que le précédent ? Ou pas ?

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par lapanne Voir le message
    j'en sais strictement rien. Clone() créé bien une nouvelle instance d'un objet dans le même état que le précédent ? Ou pas ?
    Clone se comporte comme tu lui dis de se comporter dans l'implémentation de ICloneable.Pour les classes du Framework qui implémente Clone, cela dépend de la classe et c'est clairement expliqué dans le MSDN.

    Exemple : un Clone d'une DataTable reproduit la structure mais pas les données.

Discussions similaires

  1. INTERFACE / implementation
    Par Matt27 dans le forum Langage
    Réponses: 11
    Dernier message: 02/03/2012, 16h36
  2. template, "interface", implementation
    Par line86 dans le forum Langage
    Réponses: 8
    Dernier message: 03/04/2009, 20h52
  3. probleme interface implements
    Par inquire dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2007, 19h24
  4. C++ / Interfaces / Implementation
    Par _chafouin_ dans le forum Visual C++
    Réponses: 2
    Dernier message: 28/03/2007, 18h15
  5. Implementation et Interface
    Par Bleys dans le forum Débuter
    Réponses: 5
    Dernier message: 21/06/2004, 14h00

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