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
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
Tu as regardé du côté de MemberwiseClone() ?
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
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:
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.
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(); } }
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...
J'ai finalement pu faire sans clone.
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à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...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager