Pergunta

Eu meio que entender por que isso está acontecendo, mas não inteiramente. Eu tenho uma classe base com um (Shared) variável Static, declarou assim:

Public Shared myVar As New MyObject(arg1, arg2)

Em um método de uma classe derivada, eu definir uma variável local assim:

Dim myLocalVar As MyObject = myVar

Agora, quando eu faço algo como myLocalVar.Property1 += value, o valor em persistir Property1 para a próxima chamada desse método! Suponho que eu recebo por que estaria acontecendo; myVar está sendo definido por referência e não por valor, mas eu nunca encontrei nada parecido antes. Existe alguma maneira (que não seja a minha solução, que é apenas para criar um novo objeto usando os valores de propriedade de myVar) para criar myLocalVar por valor ?

Foi útil?

Solução

Quando você cria myLocalVar você está criando uma nova referência para o mesmo objeto compartilhado. Se você realmente quer uma cópia local da instância compartilhada você terá de criar uma cópia fiel.

Isso é feito por qualquer clonagem a instância ou com um construtor de cópia do tipo que permite que você crie uma cópia da instância. Isto não é tão simples quanto parece, no entanto, devido às diferenças entre rasas e profundas cópia e uma instância clonado ou copiado poderia criar problemas semelhantes para você se a propriedade que você está acessando é simplesmente uma referência copiado-rasa para a mesma instância que a propriedade na instância original é referência.

A melhor coisa que fazer neste caso é criar uma cópia local somente as partes da instância compartilhada que você precisa, em vez de copiar todo o gráfico do objeto. Isto significa criar uma cópia local de qualquer Property1 tipo é e usando isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top