Object variable assignment
-
Friday, September 21, 2012 3:52 AM
In my VB application I need to remember object reference and then reassign it back to the variable.
Here is my approach:
Dim v1 as MyObject, v2 as MyObject
v1 = new MyObject()
v2 = new MyObject()
' now do some manipulation on v1 that changes its data
' now I want ot get back my data
v1 = v2
I hoped that now v1 points to the same memory as v2
but when I inspect the code it seems that new memory is used and data copied into that memory.
Is that what is happening, or where is the mistake
All Replies
-
Friday, September 21, 2012 4:04 AMModerator
Please examine these tests. Reply if you still have questions -
Public Class MyObject Public Property SomeString As String End Class <TestClass()> _ Public Class UnitTest <TestMethod()> _ Public Sub TestReference1() Dim expected = "some string" Dim notExpected = "some other string" Dim v1 = New MyObject() With {.SomeString = expected} Dim v2 = New MyObject() With {.SomeString = expected} Assert.AreEqual(expected, v1.SomeString) Assert.AreEqual(expected, v2.SomeString) v1.SomeString = notExpected Assert.AreEqual(notExpected, v1.SomeString) Assert.AreEqual(expected, v2.SomeString) v1 = v2 Assert.AreEqual(expected, v1.SomeString) Assert.AreEqual(expected, v2.SomeString) End Sub <TestMethod()> _ Public Sub TestReference2() Dim expected = "some string" Dim notExpected = "some other string" Dim v1 = New MyObject() With {.SomeString = expected} Dim v2 = v1 Assert.AreEqual(expected, v1.SomeString) Assert.AreEqual(expected, v2.SomeString) v1.SomeString = notExpected Assert.AreNotEqual(expected, v1.SomeString) Assert.AreNotEqual(expected, v1.SomeString) Assert.AreEqual(notExpected, v1.SomeString) Assert.AreEqual(notExpected, v2.SomeString) End Sub End Class
gimme some slamming techno!!!!
- Edited by Blair Allen StarkModerator Friday, September 21, 2012 4:07 AM
- Marked As Answer by Mark Liu-lxfModerator Tuesday, October 02, 2012 6:26 AM
-
Friday, September 21, 2012 4:12 AM
Dim v1 as MyObject
Dim v2 as MyObjectv1 = new MyObject()
' now do some manipulation on v1 that changes its data
...
'Now save a copy of v1
v2 = Ctype(v1.Clone, MyObject) 'v1 and v2 refer to different objects
' now do some more manipulation on v1 that changes its data
...
' now I want to get back my data from the saved copy
v1 = v2 'v1 and v2 now refer to the same object'now I want to restore the object to its initial default values
v1 = New MyObject()- Marked As Answer by Mark Liu-lxfModerator Tuesday, October 02, 2012 6:26 AM

