Instantiate Lokale Variable von Wert?
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
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.