I\'m \"cloning\" objects in my code. For instance:
objClone = objOriginal
My question is:
I'm not sure about VB, but the C# version of assignment only does a shallow copy. (Edit: For reference types).
It's a reference copy, if the type is a reference type (ie: classes). If it's a value type (Structure), it will do a member by member copy.
What happens with the code that you show depends on what type objOriginal
is:
objClone
will reference the same instance as objOriginal
objClone
will be a new instance, with the same content as objOriginal
Note though, if it is a value type having any members being reference types, those members will reference the same instances as the original object (this is known as a shallow copy).
Examples:
Public Class Test
Public Number As Integer
End Class
Dim objOriginal As New Test()
objOriginal.Number = 42
Dim objClone As Test
objClone = objOriginal
In this case, objClone
and objOriginal
will both reference the same instance of Test
.
Public Structure Test
Public Number As Integer
End Class
Dim objOriginal As New Test()
objOriginal.Number = 42
Dim objClone As Test
objClone = objOriginal
In this case, objClone
and objOriginal
will be different instances of Test
, each with their own Integer
instance in the Number
field.
Public Class SomeValue
Public Number As Integer
End Class
Public Structure Test
Public Value As SomeValue
End Class
Dim objOriginal As New Test()
objOriginal.Value = New SomeValue()
objOriginal.Value.Number = 42
Dim objClone As Test
objClone = objOriginal
In this case, objClone
and objOriginal
will be two different instances of k, but both will reference the same instance of SomeValue
through their Value member.