1

我有点理解为什么会这样,但不完全理解。我有一个带有Shared( Static) 变量的基类,声明如下:

Public Shared myVar As New MyObject(arg1, arg2)

在派生类的方法中,我设置了一个局部变量,如下所示:

Dim myLocalVar As MyObject = myVar

现在,当我执行类似的操作时myLocalVar.Property1 += value, in 的值Property1将持续到该方法的下一次调用!我想我明白为什么会发生这种情况;myVar是按引用而不是按值设置的,但我以前从未遇到过这样的事情。有什么方法(除了我的解决方法是使用 的属性值创建一个新对象myVarmyLocalVar 按值创建?

4

1 回答 1

3

创建时,myLocalVar您正在创建对同一共享对象的新引用。如果您真的想要共享实例的本地副本,则需要创建一个真实副本。

这是通过克隆实例或在允许您创建实例副本的类型上使用复制构造函数来完成的。然而,这并不像听起来那么简单,由于深复制和浅复制之间的差异,如果您正在访问的属性只是对相同实例的浅复制引用,那么克隆或复制的实例可能会给您带来类似的问题原始实例上的属性正在引用。

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

于 2010-01-07T03:47:52.007 回答