我有点明白为什么会这样,但不完全。我有一个SharedStatic)可变基类,声明如下所示:

Public Shared myVar As New MyObject(arg1, arg2)

在一个派生类的方法,我设置局部变量,像这样:

Dim myLocalVar As MyObject = myVar

现在,当我这样做myLocalVar.Property1 += value,在Property1值保持于该方法的下一次调用!我想我得到的为什么的它会发生; myVar正在被引用,而不是由值设置,但我从来没有遇到过这样的事。有没有(这是使用myVar的属性值只需要创建一个新的对象不是我的解决办法等)的价值创造myLocalVar任何

有帮助吗?

解决方案

当创建myLocalVar要创建一个新的引用同一共享对象。如果你真的想共享实例的本地副本,你将需要创建一个真实副本。

这是由任一克隆实例或与上,允许你创建实例的副本的类型复制构造完成。这并不简单,因为它的声音,但由于深,浅拷贝和克隆或复制的实例可以为你创建类似的问题之间的区别,如果你正在访问的属性是一个简单的浅拷贝参照同实例上的原始实例的属性所引用。

我要在这种情况下,最好的做法是创建仅需要,而不是复制整个对象图的共享实例的零部件的本地副本。这意味着创建的任何类型Property1是和使用本地副本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top