Frage

ich irgendwie verstehen, warum dies geschieht, aber nicht ganz. Ich habe eine Basisklasse mit einem Shared (Static) Variable, wie so erklärt:

Public Shared myVar As New MyObject(arg1, arg2)

Bei einem Verfahren einer abgeleiteten Klasse, habe ich eine lokale Variable wie folgt:

Dim myLocalVar As MyObject = myVar

Wenn ich jetzt so etwas wie myLocalVar.Property1 += value tue, bleibt der Wert in Property1 bis zum nächsten Aufruf dieser Methode! Ich glaube, ich bekommen Warum es geschehen würde; myVar wird durch Bezugnahme statt durch Wert gesetzt, aber ich habe noch nie so etwas begegnet. Gibt es eine Möglichkeit (außer meiner Abhilfe, die ist nur ein neues Objekt erstellen mit Hilfe der Eigenschaftswerte von myVar) myLocalVar von Wert zu schaffen

War es hilfreich?

Lösung

Beim Erstellen myLocalVar Sie einen neuen Verweis auf das gleiche gemeinsame Objekt zu schaffen. Wenn Sie wirklich eine lokale Kopie der gemeinsam benutzten Instanz möchten, müssen Sie eine originalgetreue Kopie erstellen.

Dies wird entweder durch das Klonen der Instanz oder mit einem Copy-Konstruktor von der Art getan, dass Sie eine Kopie der Instanz erstellen kann. Das ist nicht so einfach wie es klingt, aber aufgrund der Unterschiede zwischen tiefen und flachen Kopieren und einer geklonten oder kopiert Beispiel könnten ähnliche Probleme für Sie erstellen, wenn die Eigenschaft, die Sie zugreifen, ist einfach eine flache kopierten Verweis auf die gleiche Instanz, das Grundstück, auf der ursprünglichen Instanz verweist.

Das Beste, was ich in diesem Fall zu tun ist, eine lokale Kopie nur die Teile der gemeinsamen Instanz zu erstellen, die Sie brauchen, anstatt die gesamten Objektgraphen zu kopieren. Das bedeutet, eine lokale Kopie erstellen wie auch immer gearteten Property1 ist und die Verwendung dieser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top