gpt4 book ai didi

vba - VB6:如何在集合中正确存储类对象?

转载 作者:行者123 更新时间:2023-12-02 08:36:04 24 4
gpt4 key购买 nike

我正在查看旧版 VB6 应用程序,并试图了解 VB6 集合的工作原理。使用 Collection.Add 方法,我发现该集合只存在其最后添加的选项,重复。 例如如果我将 1、2、3、4 和 5 添加到集合中,我将得到 5、5、5、5 和 5 作为集合内容。

在我的测试用例中,我有一个封装类模块EncapsulationClass.cls,它存储一些简单的字符串。它的实现:

Option Explicit

'ivars
Private pEntityId As String
Private pEntityName As String

'properties
'pEntityId
Public Property Get entityId() As String
Let entityId = pEntityId
End Property

Private Property Let entityId(ByVal inEntityId As String)
Let pEntityId = inEntityId
End Property


'pEntityName
Public Property Get entityName() As String
Let entityName = pEntityName
End Property

Private Property Let entityName(ByVal inEntityName As String)
Let pEntityName = inEntityName
End Property


'constructor
Public Sub init(ByVal inEntityId As String, ByVal inEntityName As String)
Let entityId = inEntityId
Let entityName = inEntityName
End Sub

我想将这些的几个实例存储在一个可迭代对象中,所以我使用了一个集合

在我的测试用例中,我有这个简单的功能:

Private Function getACollection() As Collection
Dim col As New Collection
Dim data(0 To 5) As String
data(0) = "zero"
data(1) = "one"
data(2) = "two"
data(3) = "three"
data(4) = "four"
data(5) = "five"

For Each datum In data
Dim encap As New EncapClass
encap.init datum, datum & "Name"
col.Add encap
Next

'return
Set getACollection = col
End Function

然后在以下简单逻辑中使用此函数:

Private Sub Form_Load()
Dim col As Collection
Set col = getACollection()

For Each i In col
Debug.Print i.entityId, i.entityName
Next i
End Sub

我希望输出是:

one oneName
two twoName
three threeName
four fourName
five fiveName

但是,相反,我只是重复添加了最后一个元素,共五次。

five fiveName
five fiveName
five fiveName
five fiveName
five fiveName

在句法上我是否遗漏了什么?翻翻各种books ,集合附加了 Add 方法,并按预期工作。

最佳答案

set 的缺失有效地重用了相同的 encap 实例,因此循环内的更改修改了集合中已有的单个重复引用。

修复:

 Dim encap As EncapClass

For Each datum In data
set encap = New EncapClass
encap.init datum, datum & "Name"
col.Add encap
Next

关于vba - VB6:如何在集合中正确存储类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com