使用=时更新所有值的类的多个实例

时间:2012-08-14 13:27:28

标签: .net vb.net class

我有如下所示的自定义类;

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"

感谢。

3 个答案:

答案 0 :(得分:2)

这是问题所在:

obj1 = obj2

obj2的值复制到obj1。该值对象 - 它是对象的引用。所以现在obj1obj2引用同一个对象,因此通过一个变量所做的任何更改都将被另一个变为

我意识到这是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