Clonare un oggetto.

lunedì 23 luglio 2007 - 15.20

BangBangMan Profilo | Newbie

Salve a tutti!

Perdoante la mai domanda da niubbo ma so come cavarmela.

Da quello che so VB.Net quando effettua l'assegnazione di un oggetto su di un'altro lo fa per riferimento quindi, come faccio ad impedirlo?

Io ho un'oggetto datagridview che voglio clonare per avere al termine dell'elaborazione due griglie distinte es:

Dim g1 as new datgridview
Dim g2 as new datagridview

Bene, ad un certo punto io faccio un'operazione di questo genere:

g2 = g1

Ma a questo punto se vado a modificare i valori presenti in g2 le modifiche ricadranno anche su g1.

Per gli array esiste il metodo Clone(), ma con gli oggetti di questi genere?
Spero mi darete una mano

Saluti

Brainkiller Profilo | Guru

Ho avuto recentemente lo stesso problema.
Premesso che non so quanto ne valga la pena clonare due oggetti tipo GridView, io in genere clono due oggetti/classi da me costruite. La prima cosa da fare è implementare l'interfaccia ICloneable esempio:

class NomeClasse : ICloneable { }

e come da specifiche dell'interfaccia bisogna implementare il metodo Clone().
Io proceduto così:

public object Clone() { return MemberwiseClone(); }

Questo ti effettua una Shallow Copy.
Eventualmente tu potresti avere bisogno di una Deep Copy.
In caso vuoi un po' di chiarezza sui due concetti leggi qui:
http://msdn2.microsoft.com/en-us/library/system.object.memberwiseclone.aspx
Nella parte Remarks.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

BangBangMan Profilo | Newbie

Intanto grazie per avermi risposto.

Allora...ho fatto come hai detto ma encora no funziona evidentemente sbaglio qualcosa.

Mi sono creato una classe datagridview personalizzata che implemente l'interfaccia ICloneable.

Nell metodo Clone ho messo:

"Return MemberwiseClone()"

ma così funziona tutto come prima ovvero fa una copia che punta sempre all'oggetto originale.

Cosa sbaglio?

Brainkiller Profilo | Guru

>ma così funziona tutto come prima ovvero fa una copia che punta
>sempre all'oggetto originale.

Attenzione, ti sei letto bene la differenza tra Shallow e Deep Copy ? La shallow copy ti fa la copia di tutti i value fields me nel caso di riferimenti i due oggetti punteranno allo stesso oggetto puntato, per clonare effettivamente tutta la struttura devi usare la Deep Copy. Nel documento che ti ho indicato trovi le info anche su come fare la Deep Copy.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5