Assignment “=” operator in VB.NET 1.1

前端 未结 3 591
悲&欢浪女
悲&欢浪女 2021-01-16 00:26

I\'m \"cloning\" objects in my code. For instance:

objClone = objOriginal

My question is:

  1. Does the assignment operator in VB
相关标签:
3条回答
  • 2021-01-16 00:43

    I'm not sure about VB, but the C# version of assignment only does a shallow copy. (Edit: For reference types).

    0 讨论(0)
  • 2021-01-16 00:50

    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.

    0 讨论(0)
  • 2021-01-16 00:56

    What happens with the code that you show depends on what type objOriginal is:

    • If it is a reference type, objClone will reference the same instance as objOriginal
    • If it is a value type, 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.

    0 讨论(0)
提交回复
热议问题