Nello sviluppo del mio progetto ho scoperto una cosa perlomeno curiosa, a meno che io non abbia capito niente di Collezioni.
Esempio di codice:
'esiste altrove una Classe pubblica clsElementi
Public cLista As Collection 'collezione di classi clsElementi
Private $cElemento as clsElementi 'dichiaro un elemento della Collection
....
$cElemento = New clsElementi
....
$cElemento = cLista["chiave"]
Fin qui tutto bene; $cElemento è una copia dell'elemento [chiave] nella collezione.
Però mi aspetterei che $cElemento sia, come detto, una copia instanziata per valore e non per referenza.
Questo è forse il mio errore 'ideologico'
In realtà, $cElemento è una copia per referenza, tant'è che se io modifico i contenuti di $cElemento questi sono immediatamente riflessi nella Collezione originaria.
Se questo è confermato, non sono certo che sia il comportamento corretto; è vero che semplifica la vita in quanto non è necessario fare l'assegnazione inversa (cLista["chiave"] = $cElemento) per registrare la modifica, però in questo modo si possono generare degli effetti collaterali subdoli.
Non so se sono stato chiaro nell'esposizione, ma se qualcuno ha delucidazioni da fornire è benaccetto.
.... se qualcuno ha delucidazioni da fornire è benaccetto.
Nell'attesa di altre risposte qui, e con spirito ecumenico ed univarsale ho posto questa tua questione nel forum della Comunità ispanica dei programmatori Gambas.
Ho avuto una prima risposta che così traduco:
" Ritengo che sia coerente. In Gambas tutti gli oggetti vengono passati per "Riferimento" e presto ci si abitua a pensare così.
Se non ti piace, puoi utilizzare semplicemente il metodo .Copia() della Collezione, ossia:
Public cLista As Collection 'collezione di classi clsElementi
Private $cElemento as clsElementi 'dichiaro un elemento della Collection
....
dim copyclista as Collection
copylista = cLista.Copy
$cElemento = New clsElementi
....
$cElemento = copylista["chiave"]
'...etc.
saluti "