2017-03-17 58 views
4

我有一个公共变量Public AssetFamilyCollection As New Collection,它是我创建的类别AssetFamily的集合。为什么要对公共变量进行私有变量更改?

在一个子集中,我创建了一个实例,其中包含Dim familyChosen As AssetFamily。 后来,当我已经确定了AssetFamily我希望在收集我做Set familyChosen = AssetFamilyCollection(i)

在某些时候,我就familyChosen性质的变化,我注意到,这些变化也已经做了AssetFamilyCollection(i)

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

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

谢谢!

回答

6

不,它不会像那样工作。

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

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

2

这监守

Set familyChosen = AssetFamilyCollection(i) 

“familyChosen”的是现在为“AssetFamilyCollection(I)”

到一个实例的任何更改将更新另一个作为它们都引用相同的对象的引用。

+1

形式上它是到相同的对象的引用作为由阵列元件称为。 – Bathsheba

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

    您可能需要知道深复制浅复制之间的diffenerce。


  • 当创建执行的代码 “昏暗familyChosen作为AssetFamily”,新 “AssetFamily”。

    但是,当“Set familyChosen = AssetFamilyCollection(i)”执行时,您没有创建任何东西,您只是让家族指向已存在的“AssetFamily” 。


  • 所以,如果你想“复制”而不是“指针”,你可以写在类“AssetFamily”,如“克隆”一个 功能,创建一个新的 “AssetFamily”,并使其与旧的一样。

    然后,可以写出这样的事:

    集familyChosen = AssetFamilyCollection(ⅰ).Clone()