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 d'objet sans IClonable


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut Copie d'objet sans IClonable
    Bonjour

    Est-il possible d'obtenir la copie d'un objet sans que IClonable ne soit implémenté, ni implémentable (classe appartenant à une bibliothèque externe à mon projet) ?


    Merci d'avance

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu as regardé du côté de MemberwiseClone() ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Cette méthode ne semble pas être disponible dans mon objet.

    Si ça peut aider, la classe que je veux cloner hérite de PictureBox

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    LA méthode MemberwiseClone est protégée et donc inaccessible en dehors de l'objet lui même. D'ailleurs cette méthode n'existe que pour implémenter l'interface Icloneable a priori. Donc pour moi si ta classe n'implémente pas ICloneable tu ne peux pas la copier de manière sûre.

    Une solution laide pourrait être de créer une classe dérivée de la classe qui t'intéresse, à condition bien sûr que celle-ci ne soit pas déclarée final, d'implémenter dans cette classe l'interface ICloneable et d'appeler MemberwiseClone depuis la méthode Clone, ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class NouvelleClasse : LaClasseAcloner, ICloneable
    {
       public object Clone()
       {
          return MemberwiseClone();
       }
    }
    Si LaClasseAcloner est déclarée final, tu peux aussi tenter de créer une nouvelle classe qui l'encapsule plutot que d'en dériver, mais alors il faudra réexposer tte les méthodes /propriétés publique de LaClasseAcloner.

    Ensuite c'est une solution moche car MemberwiseClone ne va faire qu'une copie superficielle de ta classe (une shallow copy) , c'est à dire ne copier réellement que les types valeur de la classe et pour les types référence seules les références seront copiées, les objets sous jacents ne seront pas dupliqués...

    Dernier point, peut être pas le moins important, pourquoi copier une picturebox ? C'est un contrôle qui doit posséder des infos de manières uniques (genre un handle de fenêtre, un identifiant etc...) qu'il n'est surement pas bon de copier...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    J'ai finalement pu faire sans clone.

    Dernier point, peut être pas le moins important, pourquoi copier une picturebox ? C'est un contrôle qui doit posséder des infos de manières uniques (genre un handle de fenêtre, un identifiant etc...) qu'il n'est surement pas bon de copier...
    J'utilise la bibliothèque sharpMap pour afficher des cartes. Mon application propose une fonction d'enregistrement (sous divers format d'image) et d'impressions. Mais avant s'imprimer/enregistrer je dois effectuer quelques manipulation sur la carte (ajout d'info, redimensionnements, ...). Et pour éviter de modifier aussi l'image affichée à l'écran je voulais faire une copie de mon objet. voilà

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

Discussions similaires

  1. conserver ma liste d'objets sans Pointeur Null ...
    Par comme de bien entendu dans le forum Général Java
    Réponses: 8
    Dernier message: 24/03/2006, 11h55
  2. Trier des objets sans Comparable
    Par Shabata dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/03/2006, 13h55
  3. Méthode de classe et copie d'objets
    Par Duloup dans le forum Général Python
    Réponses: 5
    Dernier message: 11/04/2005, 16h27
  4. [VB6] Copie d'objet
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 23/08/2004, 10h04
  5. [VB6] Copie d'objets
    Par austin49 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 19/05/2003, 18h05

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