VB.NET 1.1中的赋值“=”运算符

时间:2009-11-18 17:22:01

标签: vb.net .net-1.1

我在代码中“克隆”了对象。例如:

objClone = objOriginal

我的问题是:

  1. VB.NET 1.1中的赋值运算符是否将objOriginal的成员副本执行到objClone,或者objClone是否只是指向objOriginal引用的内存的引用?

3 个答案:

答案 0 :(得分:5)

如果类型是引用类型(即:类),它是引用副本。如果它是值类型(结构),它将按成员副本执行成员。

答案 1 :(得分:3)

您显示的代码会发生什么情况取决于objOriginal的类型:

  • 如果是引用类型,objClone将引用与objOriginal相同的实例
  • 如果是值类型,objClone将成为新实例,其内容与objOriginal相同

但请注意,如果它是一个值类型,其中任何成员都是引用类型,那些成员将引用与原始对象相同的实例(这称为浅层副本)。

示例:

Public Class Test
    Public Number As Integer
End Class

Dim objOriginal As New Test()
objOriginal.Number = 42
Dim objClone As Test
objClone = objOriginal

在这种情况下,objCloneobjOriginal都会引用Test的同一个实例。

Public Structure Test
    Public Number As Integer
End Class

Dim objOriginal As New Test()
objOriginal.Number = 42
Dim objClone As Test
objClone = objOriginal

在这种情况下,objCloneobjOriginal将是Test的不同实例,每个实例在Integer字段中都有自己的Number实例。

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

在这种情况下,objCloneobjOriginal将是k的两个不同实例,但两者都会通过其Value成员引用同一个SomeValue实例。

答案 2 :(得分:0)

我不确定VB,但C#版本的赋值仅执行浅拷贝。 (编辑:参考类型)。