我有如下所示的自定义类;
Public MyClass
Public Property MyText() As String
End Class
然后在我的代码页中,我有以下VB.NET代码;
Dim obj1 As New MyClass
Dim obj2 As New MyClass
obj1 = obj2
obj1.MyText = "Test"
我的问题是,当执行下面的代码时,obj2.MyText也会更新。我怎么能避免这个?
obj1.MyText = "Test"
感谢。
答案 0 :(得分:2)
这是问题所在:
obj1 = obj2
将obj2
的值复制到obj1
。该值不对象 - 它是对象的引用。所以现在obj1
和obj2
引用同一个对象,因此通过一个变量所做的任何更改都将被另一个变为。
我意识到这是VB而不是C#,但你仍然可以发现我的article on reference types and value types很有用。从根本上说,您需要了解引用类型的行为方式。
答案 1 :(得分:0)
原因是obj1不是obj2的副本,而是一个参考。当更改obj1时,obj2也会自动更改,因为它指向相同的内存位置/实例。
答案 2 :(得分:-1)
这发生了,因为.NET基于指针。
所以你指定了一个 poiter 。不是值。
您必须使用函数将数据从 obj2 复制到 obj1
例如:http://msdn.microsoft.com/en-us/library/system.string.copy.aspx#Y100