我在代码中“克隆”了对象。例如:
objClone = objOriginal
我的问题是:
答案 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
在这种情况下,objClone
和objOriginal
都会引用Test
的同一个实例。
Public Structure Test
Public Number As Integer
End Class
Dim objOriginal As New Test()
objOriginal.Number = 42
Dim objClone As Test
objClone = objOriginal
在这种情况下,objClone
和objOriginal
将是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
在这种情况下,objClone
和objOriginal
将是k的两个不同实例,但两者都会通过其Value成员引用同一个SomeValue
实例。
答案 2 :(得分:0)
我不确定VB,但C#版本的赋值仅执行浅拷贝。 (编辑:参考类型)。