我有一个自定义集合-我们称之为colParentA-它包含许多称为colChild的集合。我想创建一个创建新集合colParentB的函数,该集合具有所有属性,并且包含与colParentA相同的子代。然后,用户可以修改他们需要的colParentB的几个属性,而不必重新定义与colParentA相同的属性。

colParentB还应包含colChild的新实例,这些实例是`colParentA中发现的副本。

我不能只是这样做吗?

set colParentB = colParentA

colParentB.Name = "Copy of " & colParentA.Name


因为这只会使colParentB指向colParentA并更改colParentA的属性,对吗?

我很困惑。感谢您的帮助。

最佳答案

您的猜想是正确的-您分配的只是指针,因此它只会引用具有不同名称的对象的相同实例。

您可能需要在colParent和colChild类上创建Clone函数。这样,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


请原谅任何错误或错别字-我没有开发环境,所以我直接在文本框中输入内容!

10-05 21:27