2008-12-18 8 views
1

J'ai une collection d'un objet appelé Signets qui est constitué d'une collection de signets. Cette collection de signets est liée à un contrôle treeview.Comment faire une copie d'un objet

Je peux récupérer les signets dont j'ai besoin, mais j'ai besoin d'une copie des signets pour pouvoir travailler avec et ne pas changer l'original.

Aucune idée.

Merci.

Répondre

3

Créez un nouveau constructeur pour votre classe de signets qui prend comme paramètre un signet existant.

Dans ce nouveau constructeur, copiez toutes les valeurs de propriété du signet existant sur le nouveau.

Cette technique est appelée "constructeur de copie".

Il existe un article sur MSDN qui va plus en détail - voir How to Write a Copy Constructor.

0

La plupart des classes de collection en .Net fournissent une surcharge de constructeur qui vous permettent de passer dans une autre collection comme

dim copyOfBookMars as New List(of BookMark)(myOriginalBookMarkList) 
+0

Ce n'est pas une liste c'est un seul signet dont j'ai besoin d'une copie qui a une propriété qui est une liste de signets. Dim aBookmark Comme nouveau FalconBookmark – user38349

+0

Donc, je ne peux pas utiliser cela, j'ai besoin d'un moyen de cloner mon signet original, ou de rompre le lien vers l'original. – user38349

0

Vous connaissez un certain temps avec VB, mais C# propose une méthode clone().

+0

Le problème avec Clone() est que la sémantique est mal définie - est-ce une copie superficielle ou profonde? Une meilleure approche consiste à utiliser un constructeur de copie. – Bevan

+0

Ce même argument s'applique également à un constructeur de copie. Le constructeur de copie est-il une copie superficielle ou une copie profonde? Donc, je ne l'utiliserais pas comme base pour votre décision. La définition d'une méthode appelée clone() présente certains avantages par rapport à un constructeur de copie. Une méthode peut être polymorphe ... –

+0

... Cela signifie que si vous avez une hiérarchie de classes, vous pouvez avoir une substitution de Clone dans chaque classe qui peut créer quelque chose de différent. Vous ne pouvez pas faire cela avec un constructeur de copie. L'utilisation de "new Foo" crée toujours un Foo. Si vous n'avez pas besoin de polymorphisme, alors c'est vraiment juste sur le style .... –

0

Vous ne faites généralement pas de copie d'un objet, un objet effectue une copie de lui-même (clone). Comme un objet contient des informations d'état, une copie de bits ne peut pas être considérée comme appropriée; donc la classe qui définit doit prendre soin d'elle.

Vous souhaiterez peut-être implémenter plusieurs pointeurs simultanés (signets) dans votre cas.

Questions connexes