gpt4 book ai didi

arrays - 包含其他对象数组的类对象

转载 作者:行者123 更新时间:2023-12-04 20:21:31 24 4
gpt4 key购买 nike

我已经用几种语言进行了编程,但我正在第一次测试 VBA。
我需要创建一个具有作为属性的类,另一个类的对象数组。
让我们举一个 Person 类的例子,它保存有关姓名、姓氏和地址的信息。还有一个地址类,它保存有关街道和邮政编码的信息。一个人可以有很多地址,所以 Person 应该有一个地址数组。

class Address
Private pStreet as String
Private pZip as Int

Public Property Let Street(val As String)
pStreet = val
End Property
Public Property Get Street() As String
Street = pStreet
End Property
Public Property Let Zip(val As String)
pZip = val
End Property
Public Property Get Zip() As String
Zip = pZip
End Property
class Person
Private pName as String
Private pSurname as String
Private pAddresses() as Address

Public Property Let Name(val As String)
pName = val
End Property
Public Property Get Name() As String
Name = pName
End Property

Public Property Let Surname(val As String)
pSurname = val
End Property
Public Property Get Surname() As String
Surame = pSurname
End Property
我应该如何管理地址数组?
我尝试使用此类代码,但如果我尝试在人员对象上调用此方法,则会收到错误“对象不支持此属性或方法”
Public Sub addAddress(val as Address)
ReDim pAddresses(1)
pAddresses(0) = val
End Sub
这样做的方法是什么?我找不到任何教程或展示如何在对象内部使用对象数组的东西

最佳答案

当您使用 redim 时,它实际上会创建一个指定大小的全新数组,因此所有现有数据都会丢失。要将旧数组中的值复制到新数组中,您需要如下所示的“保留”关键字

ReDim Preserve pAddresses(1)
但这确实效率低下,因为向数组中添加另一个元素需要重写整个数组。你可能最好使用一个集合。所以不要像这样声明 pAddress
Private pAddresses() as Address  ' delcare as an array
像这样做
Private pAddresses as New Collection ' declare as a collection
现在您添加地址的方法如下所示:
Public Sub addAddress(val as Address)
pAddresses.Add val
End Sub
集合的索引从 1 而不是 0 开始计数(就像数组一样),因此以下行打印集合中的第一个条目
Debug.Print pAddresses(1)

关于arrays - 包含其他对象数组的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71694374/

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