我有一个自定义集合 - 我们称之为colParentA
- 它包含许多名为colChild
的集合。我想创建一个创建新集合colParentB
的函数,该集合具有所有属性并包含与colParentA
相同的子项。然后,用户可以修改他们需要的colParentB
的少数属性,而不必重新定义与colParentA
相同的属性。
colParentB
还应包含colChild
的新实例,这些实例是`colParentA中找到的实例的副本。
我不能这样做吗?
set colParentB = colParentA
colParentB.Name = "Copy of " & colParentA.Name
因为这只会使colParentB
指向colParentA
并更改了colParentA
的属性吗?
我很困惑。谢谢你提前帮忙。
答案 0 :(得分:7)
你的怀疑是正确的 - 所有你指定的都是指针,所以它只会引用具有不同名称的对象的同一个实例。
您可能需要在colParent和colChild类上创建克隆函数。这样,colChild.Clone可以执行成员克隆并返回具有相同属性的全新对象,colParent可以使用克隆的colChild对象创建新集合。
但要小心,好像colParent或colChild的任何属性都是对象的引用,那么可能需要克隆那些以避免更新你不想要的值。
可能的函数是(请注意,我假设colChild包含一些类clsContent的实例 - 需要更改):
colParent.Clone:
Public Function Clone() as colParent
'Start a new parent collection
dim parent as colParent
set parent = new colParent
'Populate the new collection with clones of the originals contents
dim child as colChild
for each child in Me
parent.Add(child.Clone)
next
set Clone = parent
End Function
colChild.clone:
Public Function Clone() as colChild
'Start a new parent collection
dim child as colChild
set child = new colChild
'Populate the new collection with clones of the originals contents
dim content as clsContent
for each content in Me
child.Add(content.Clone)
next
set Clone = child
End Function
clsContent.Clone:
Public Function Clone() as clsContent
'Start a new parent collection
dim content as clsContent
set child = new clsContent
child.Property1 = me.Property1
child.Property2 = me.Property2
...
set Clone = content
End Function
请原谅任何错误或错别字 - 我没有开发方便,所以我直接写入文本框!