这是我的第一篇文章,我一直在寻找,但无法找到解决问题的答案,因为我甚至不确定该用什么术语,也不确定如何解释,但是我我将尝试一个很小的示例,它实际上是我的实际代码的简化版本:
Public Class myCustomClass
Public myValue as String
Public Sub New()
With Me
.myValue = String.Empty
End With
End Sub
End Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim myObject_A As New myCustomClass
myObject_A.myValue = "Sample String"
Dim myObject_B As New myCustomClass
myObject_B = myObject_A
myObject_B.myValue = "New Sample String"
End Sub
我遇到的问题是,当我更改myObject_B.myValue
to的值时,对to进行"New Sample String"
了相同的更改myObject_A.myValue
,就好像不是在从myObject_A
to中复制值myObject_B
,myObject_B
而是像to的指针一样myObject_A
。
我想要的是myObject_B
与相同的值myObject_A
,但不要将两者链接在一起。自从升级到适用于Windows桌面的Visual Studio Express 2012以来,我才开始注意到此行为。在以前的版本中,我认为这不是我的变量的行为方式。
我怀疑自己做错了什么,也怀疑VS 2012 for Desktop中有更改。我非常愿意在需要时分享我的实际代码,如果上面的内容足以弄清楚我在哪里搞砸,我只是不想粘贴很多东西。
真诚的,布赖恩
更新:
感谢您的克隆链接和编码示例。它可以帮助我了解正在谈论的内容,并在我有更多时间时给我一些进一步的阅读资料。这对我来说是全新的,我很高兴对此有所了解。但是,这使我想到了下一个问题,那就是我实际上是在创建myCustomClass的列表。是否可以在整个列表上实施克隆,还是需要创建一个新的myCustomClass对象的列表,然后遍历每个列表项并在每个列表上使用clone方法?
Dim myList as List(Of myCustomClass)
我不确定如何为myCustomClass列表实现克隆。
我想要的是使myObject_B与myObject_A的值相同,但不要将两者链接在一起。
最简单的方法是:
Dim myObject_A As New myCustomClass
Dim myObject_B As New myCustomClass
myObject_A.myValue = "Sample String"
myObject_B.myValue = myObject_A.myValue
这会不会在一起,但地方将它们链接myValue
来自myObject_A
中myObject_B
。这是一件快速的事情,但是,如果您有复杂的对象,我建议Clone()
您在类中实现方法。
有关克隆的更多信息。
更新:我相信您的更新问题在这里得到了回答
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句