Pregunta

En cierto modo me entiendo por qué ocurre esto, pero no del todo. Tengo una clase base con una variable Shared (Static), declaró este modo:

Public Shared myVar As New MyObject(arg1, arg2)

En un método de una clase derivada, puse una variable local, así:

Dim myLocalVar As MyObject = myVar

Ahora cuando hago algo así como myLocalVar.Property1 += value, el valor en Property1 persiste hasta la siguiente llamada de ese método! Supongo que tengo ¿Por qué que estaría sucediendo; myVar se establece por referencia en lugar de por su valor, pero nunca he encontrado nada como esto antes. ¿Hay alguna forma (aparte de mi solución, que es simplemente crear un nuevo objeto utilizando los valores de las propiedades de myVar) para crear myLocalVar por valor

¿Fue útil?

Solución

Cuando se crea myLocalVar va a crear una nueva referencia al mismo objeto compartido. Si realmente desea una copia local de la instancia compartida que tendrá que crear una copia fiel.

Esto se hace por cualquiera de clonación de la instancia o con un constructor de copia del tipo que le permite crear una copia de la instancia. Esto no es tan simple como parece, sin embargo, debido a las diferencias entre la copia profunda y superficial y una instancia de clonado o copiado podría crear problemas similares para que si la propiedad que está accediendo es simplemente una referencia de poco copiar en la misma instancia que la propiedad de la instancia original hace referencia.

La mejor cosa que hacer en este caso es crear una copia local de sólo las partes de la instancia compartida que necesita, en lugar de copiar todo el gráfico de objetos. Esto significa crear una copia local de cualquier tipo es Property1 y usar eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top