Etant donné que je travaillé en JAVA avant, j'avais l'abitude de cloner simplement les objets avec leur fonction "clone". Ca m'a fait un drôle d'effet de voir qu'en .net, cette fonction ne marchait pas.
J'ai donc trouvé une méthode simple et rapide de cloner un objet car ATTENTION :
si a est un objet et qu'on fait b = a, b n'est pas une copie de a mais simplement un "pointeur" vers a. C'est-à-dire que toute modification de a se voit dans b.
Pour faire une copie d'un objet dans un autre, j'ai donc écrit une petite fonction qui sérialise en mémoire l'objet à cloner et qui le le désérialise ensuite dans un nouvel objet. Le nouvel objet est donc le clone du premier.
ATTENTION : la classe de l'objet à cloner doit absolument être précédée de l'attribut <Serializable> !!!
Source / Exemple :
'************
'Objet à cloner
'************
<Serializable> _
Class personne
public nom as string
public prenom as string
public sub New(byval nom as string, byval prenom as string)
Me.nom = nom
Me.prenom = prenom
End sub
End Class
'******************************************
'Fonction permettant le clonage d'objets sérialisables
'******************************************
Public Class CloneObject
'Fonction de clonage d'objets sérialisables
Public Shared Function clone(ByVal objet As object) As Object
Dim mem As New system.IO.MemoryStream()
Dim binFormat As New system.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
'Sérialisation de l'objet dans le flux-mémoire
binFormat.Serialize(mem, objet)
'On se repositionne au début du flux-mémoire
mem.Seek(0, system.IO.SeekOrigin.Begin)
'Désérialisation de l'objet depuis le flux-mémoire vers l'objet renvoyé par la fonction
clone = binFormat.Deserialize(mem)
End Function
End Class
Conclusion :
Tout est dit dans la présentation.
N'oubliez pas que les classes des objets à cloner doivent être précédés de <Serializable> _
Remarque : la fonction de clonage de cette classe est "Shared" ce qui permet de l'utiliser directement sans
devoir déclarer un objet de type "CloneObject".
J'espère que cette classe vous sera utile. N'hésitez pas à me donner vos fonctions de clonage si vous en connaissez de meilleurs (ex : IClonable, etc.)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.