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 :

[C#]Comment puis-je copier un objet ?


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [C#]Comment puis-je copier un objet ?
    Bonjour tout le monde !

    J’ai besoin de copier une instance d’un objet le plus rapidement(« shallow copy » suffira). Il n’a pas ni ICloneable, ni constructeur de copie et je ne peux pas lui changer. Je peux d’en hériter, mais je ne sais pas comment l’utiliser.

    (Je ne veux pas copier tous les membres moi même)

  2. #2
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonObjectType objetOriginal=new MonObjectType();
    MonObjectType objectCopie=objetOriginal;

  3. #3
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par zeavan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonObjectType objetOriginal=new MonObjectType();
    MonObjectType objectCopie=objetOriginal;
    Tu ne copie l'objet mais seulement la référence la ... si tu fait une modification "dans" objectCopie elle sera dans objecOriginal ...

    Si ton objet est pas ICloneable ... ben tu copie à la main les membres, pas le choix ...

  4. #4
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    j'avais pas vu qu'il voulait une copie par value desoler.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par zeavan
    j'avais pas vu qu'il voulait une copie par value desoler.
    Mais je voudrais avoir deux instances et leur changer séparément

  6. #6
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par lanuage
    Bonjour tout le monde !

    J’ai besoin de copier une instance d’un objet le plus rapidement(« shallow copy » suffira). Il n’a pas ni ICloneable, ni constructeur de copie et je ne peux pas lui changer. Je peux d’en hériter, mais je ne sais pas comment l’utiliser.

    (Je ne veux pas copier tous les membres moi même)
    En résumant, tu n'a aucun moyen de copier ton objet, tu ne veux pas modifier ta classe, tu veux pas faire toi meme la copie ..... Et tu veuc comme meme copier l'objet

    Si tu trouve une solution, n'oublie pas de nous mettre au courant.

  7. #7
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    La réflection ?

    Tu peux l'utiliser pour parcourir tout les membres de l'objet et les réaffecter sans avoir à les connaître ou te tartiner une palanqué de lignes de code dans le cas d'un objet avec beaucoup de membres.

    Voir
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typeof(MaClasse).GetFields();
    FieldInfo
    FieldInfo.SetValue(object, object) et FieldInfo.GetValue(object)
    Bon courage

  8. #8
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    C'est une bonne idée la réflexion, je vais garder ça dans un coin de ma tête tiens ...

  9. #9
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Oui la reflexion mais attention, c'est les membres sont de typs references, alors ca va être un peu compliqué, en plus il veut une copie rapide et dans ce cas la reflexion est loin d'être la solution.

  10. #10
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Points : 1 076
    Points
    1 076
    Par défaut
    Citation Envoyé par mehdi_tn
    Oui la reflexion mais attention, c'est les membres sont de typs references, alors ca va être un peu compliqué, en plus il veut une copie rapide et dans ce cas la reflexion est loin d'être la solution.
    Ca depend aussi ce que notre ami lanuage entend par rapide.
    La solution de cortex93 est propre, evite la copie de code dans tous les sens il faut juste penser a prendre en compte le cas des attributs en lecture seule, apres je ne vois pas vraiment d'autre solution.

  11. #11
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par mehdi_tn
    Oui la reflexion mais attention, c'est les membres sont de typs references, alors ca va être un peu compliqué, en plus il veut une copie rapide et dans ce cas la reflexion est loin d'être la solution.
    ça dépend aussi jusqu'a quel niveau il veux copier ... Si c'est une copie intégrale alors il faut faire une récurrence (oui oui c'est galère ) sinon la copie de la référence est possible. De plus on peut introduire toute sorte de subtilité dans ce genre de code comme par exemple la détection d'un objet qui implémente ICloneable ...

    Bref c'est sujet vaste ou un vaste sujet au choix ...

  12. #12
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Plus simplement : pourquoi ne pas implémenter IClonable ?
    C'est pas comme si c'était compliqué.

    Et si tu ne peux pas modifier ton object, bah dérive le et rajoute juste la méthode de clonage.

    Reflection : d'accord avec Medhi, c'est lent. Et je trouve pas ça propre, bien au contraire. Maintenant, c'est vrai que ça marche.

    PS : c'est pas la Reflection que je trouve sale, c'est de se servir de la Reflection pour remplacer une fonctionnalité qu'on a la flemme de coder normalement.

  13. #13
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par dev01
    ça dépend aussi jusqu'a quel niveau il veux copier ... Si c'est une copie intégrale alors il faut faire une récurrence (oui oui c'est galère ) sinon la copie de la référence est possible. De plus on peut introduire toute sorte de subtilité dans ce genre de code comme par exemple la détection d'un objet qui implémente ICloneable ...
    Je suis d'accord avec toi, de plus je crois que notre ami veut juste copier les réferences puis qu'il parle d'une shallow copy. Le probleme qu'il a apparament abondonné le sujet pour nous donner plus de détails.

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/11/2013, 19h49
  2. Réponses: 4
    Dernier message: 31/01/2012, 19h51
  3. Réponses: 1
    Dernier message: 27/05/2010, 00h42
  4. Réponses: 11
    Dernier message: 29/09/2008, 10h57
  5. comment puis-je recupérer l'extesion du fichier?
    Par mirella dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2002, 15h56

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