Domanda

I sorta di capire perché questo sta accadendo, ma non del tutto. Ho una classe di base con una variabile Shared (Static), ha dichiarato in questo modo:

Public Shared myVar As New MyObject(arg1, arg2)

In un metodo di una classe derivata, ho impostato una variabile locale in questo modo:

Dim myLocalVar As MyObject = myVar

Ora, quando faccio qualcosa di simile myLocalVar.Property1 += value, il valore in Property1 persiste per la prossima chiamata di questo metodo! Suppongo che ho perché che sarebbe successo; myVar è fissata in riferimento invece che per valore, ma non ho mai incontrato nulla di simile prima. C'è un modo (altro che il mio soluzione alternativa, che è quello di creare solo un nuovo oggetto utilizzando i valori di proprietà di myVar) per creare myLocalVar per valore

È stato utile?

Soluzione

Quando si crea myLocalVar si sta creando un nuovo riferimento allo stesso oggetto condiviso. Se veramente si vuole una copia locale del istanza condivisa è necessario creare una copia.

Questo è fatto o clonando l'istanza o con un costruttore di copia del tipo che consente di creare una copia dell'istanza. Questo non è così semplice come sembra, tuttavia, a causa delle differenze tra la copia profonda e superficiale e un'istanza clonata o copiata potrebbe creare problemi simili per voi, se la proprietà si sta accedendo è semplicemente un riferimento poco profonde copiato nella stessa istanza che la proprietà nell'istanza originale fa riferimento.

La cosa migliore che ho da fare in questo caso è quello di creare una copia locale solo le parti della istanza condivisa che è necessario, piuttosto che copiare l'intero grafo di oggetti. Ciò significa creare una copia locale di qualsiasi tipo è Property1 e l'utilizzo di questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top