Ciao supponiamo di avere due array di oggetti
Dim oggetti as new miaclasse[2]
Dim copia as new miaclasse[2]
ora eseguo la copia di uno sull'altro
ora se faccio
anche l'altro array si modifica allo stesso modo
darà lo stesso risultato cioè 5
questo perchè presumo che si copiano in un altro array i riferimenti agli stessi oggetti che sono le classi miaclasse precedentemente create
quindi sono solo gli array ad essere copiati e non le classi di cui conservano i riferimenti
Eiste un metodo che non sia complicato per fare la copia anche delle classi puntate dagli array?
Con qualche leggera integrazione, a soli fini esplicativi, del tuo codice i problemi, da te posti, io li spiegherei così:
Public Sub Form_Open()
Dim obj As New Class1
' Mostra l'indirizzo di memoria dell'Oggetto "obj" del tipo Class1:
Print obj
obj.valore = 5
Module1.vettore.push(obj)
End
Public Sub Button1_Click()
Dim copia As Class1[]
' Il Metodo ".Copy()" genera una copia esatta dell'array, ma allocando (e quindi usando) una diversa area di memoria.
copia = Module1.vettore.Copy()
' Quindi avremo due array identici, ma posti in aree di memoria "distinte" e separate.
Print Module1.vettore, copia
' Poiché nella subroutine "Form_Open()" si è provveduto anche ad assegnare all'array di tipo Class1, denominato "Module1.vettore",
' un Oggetto di tipo Class1, quando qui poco sopra si è effettuata la copia esatta del predetto array "Module1.vettore",
' sono stati copiati pedissequamente nell'array "copia" tutti i dati e riferimenti presenti nell'array "Module1.vettore".
' Infatti sia l'array "Module1.vettore" che l'array "copia" posseggono l'indirizzo di memoria dell'Oggetto "obj" del tipo Class1.
Print Module1.vettore[0], copia[0]
' La qual cosa rende comprensibile perché la proprietà "valore" appartenente al primo Oggetto di tipo Class1 (che non è altri che: "obj"),
' contenuto - o meglio "puntato" - da entrambi gli array restituisca il medesimo valore:
Print "Prima " & Module1.vettore[0].valore, copia[0].valore
' ...ed ugualmente ben si comprende perché cambiando il valore della proprietà "valore" del primo Oggetto di tipo Class1 contenuto (puntato)
' dall'array "copia" sia identico conseguentemente al valore restituito del primo Oggetto di tipo Class1 contenuto (puntato) dall'array "Module1.vettore".
Print
copia[0].valore = 0
Print "Dopo " & Module1.vettore[0].valore
' Per salvare il valore "5" all'inizio posseduto dalla proprietà "valore" del primo Oggetto di tipo Class1 contenuto (puntato) dall'array "Module1.vettore",
' bisognerà creare nell'array "copia" un "nuovo" Oggetto di tipo Class1, ossia avente un'area di memoria diversa da quella dell'Oggetto contenuto
' (puntato) dall'array "Module1.vettore".
' Infatti, se commentiamo la precedente rida di comando "copia[0].valore = 0", e scriviamo le seguenti righe, abbiamo un risultato diverso
' restituito dalla proprietà "valore" dell'Oggetto contenuto (puntato) dall'array "Module1.vettore".
Print
copia[0] = New Class1
copia[0].valore = 0
Print "Dopo " & Module1.vettore[0].valore
End
:-X