为什么还要对公共变量进行私有变量的更改?

时间:2017-03-17 17:21:36

标签: vba excel-vba excel

我有一个公共变量Public AssetFamilyCollection As New Collection,它是我创建的classe AssetFamily的集合。

在子广告中,我使用AssetFamily创建Dim familyChosen As AssetFamily个实例。 然后,当我在集合中识别出我想要的AssetFamily Set familyChosen = AssetFamilyCollection(i)

在某些时候,我对familyChosen属性进行了更改,我发现这些更改也已对AssetFamilyCollection(i)

进行了更改

我认为familyChosen是一个私有变量,来自AssetFamilyCollection(i)的副本,只存在于子内。显然不是。

为什么公共和私人变量会受到变化的影响,而不受子变量中的私有变量的影响?

谢谢!

3 个答案:

答案 0 :(得分:6)

不,它没有那样的工作。

变量familyChosen实际上是对数组元素引用的同一对象的引用。

因此,您可以通过该引用或通过数组元素修改该对象。

答案 1 :(得分:3)

  • 这是关于基本类型对象类型的问题。

    您可能需要了解深层复制和之间的差异 浅拷贝

  • 当代码“Dim familyChosen As AssetFamily”执行时,一个新的 “AssetFamily”已经创建。

    但是,当“Set familyChosen = AssetFamilyCollection(i)”执行时, 什么都没有创造,你刚刚让家人选择了 已经存在的“AssetFamily”。

  • 所以,如果你想要一个“副本”而不是一个“指针”,你可以写一个 函数在“AssetFamily”类中,例如“Clone”,以创建一个新的 “AssetFamily”并使其与旧版本相同。

    然后,你可以这样写:

    Set familyChosen = AssetFamilyCollection(i).Clone()

答案 2 :(得分:2)

这是因为

Set familyChosen = AssetFamilyCollection(i)

'familyChosen'现在是对'AssetFamilyCollection(i)'

的引用

对一个实例的任何更改都会更新另一个实例,因为它们都引用同一个对象。