2

我有如下自定义类;

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"

谢谢。

4

3 回答 3

2

这就是问题:

obj1 = obj2

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

我意识到这是 VB 而不是 C#,但您可能仍然会发现我关于引用类型和值类型的文章很有用。从根本上说,您需要了解引用类型的行为方式。

于 2012-08-14T13:30:53.143 回答
0

原因是 obj1 不是 obj2 的副本,而是一个引用。更改 obj1 时,obj2 也会自动更改,因为它指向相同的内存位置/实例。

于 2012-08-14T13:31:12.003 回答
-1

这发生了,因为 .NET 是基于指针的。

所以你分配一个指针。不是价值

您必须使用函数将数据从obj2复制 到obj1

例如:http: //msdn.microsoft.com/en-us/library/system.string.copy.aspx#Y100

于 2012-08-14T13:34:11.780 回答