我有一个公共变量Public AssetFamilyCollection As New Collection
,它是我创建的classe AssetFamily
的集合。
在子广告中,我使用AssetFamily
创建Dim familyChosen As AssetFamily
个实例。
然后,当我在集合中识别出我想要的AssetFamily
Set familyChosen = AssetFamilyCollection(i)
在某些时候,我对familyChosen
属性进行了更改,我发现这些更改也已对AssetFamilyCollection(i)
我认为familyChosen
是一个私有变量,来自AssetFamilyCollection(i)
的副本,只存在于子内。显然不是。
为什么公共和私人变量会受到变化的影响,而不受子变量中的私有变量的影响?
谢谢!
答案 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)'
的引用对一个实例的任何更改都会更新另一个实例,因为它们都引用同一个对象。