Answered 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 AM
    Moderator
     
     Answered Has Code

    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!!!!


  • Friday, September 21, 2012 4:12 AM
     
     Answered

    Dim v1 as MyObject
    Dim v2 as MyObject

    v1 = 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()