Question

Je sorte de comprendre pourquoi ce qui se passe, mais pas tout à fait. J'ai une classe de base avec une variable Shared (de Static), a déclaré comme ceci:

Public Shared myVar As New MyObject(arg1, arg2)

Dans une méthode d'une classe dérivée, je définir une variable locale comme ceci:

Dim myLocalVar As MyObject = myVar

Maintenant, quand je fais quelque chose comme myLocalVar.Property1 += value, la valeur Property1 persiste au prochain appel de cette méthode! Je suppose que je reçois pourquoi il se passerait-il; myVar est fixé par référence au lieu de la valeur, mais je ne l'ai jamais rencontré quelque chose comme ça avant. Est-il possible (autre que ma solution de contournement qui est de créer simplement un nouvel objet en utilisant les valeurs de propriété de myVar) pour créer myLocalVar par valeur

Était-ce utile?

La solution

Lorsque vous créez myLocalVar vous créez une nouvelle référence au même objet partagé. Si vous voulez vraiment une copie locale de l'instance partagée, vous devrez créer une copie.

Ceci est fait soit par clonage l'instance ou avec un constructeur de copie du type qui vous permet de créer une copie de l'instance. Ce n'est pas aussi simple que cela puisse paraître, cependant, en raison des différences entre la copie profonde et peu profonde et une instance cloné ou copié pourrait créer des problèmes similaires pour vous si la propriété que vous accédez est tout simplement une référence copié peu profonde à la même instance que la propriété sur l'instance d'origine fait référence.

La meilleure chose que je fasse dans ce cas est de créer une copie locale que les parties de l'instance partagée que vous avez besoin, plutôt que de copier l'ensemble graphique d'objets. Cela signifie créer une copie locale de tout type Property1 est et à l'aide que.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top