Cloner un objet très simplement

Contenu du snippet

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.)

A voir également

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.