gpt4 book ai didi

list - vb6 等价于 list

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

我想知道是否存在(.net)的等价物

list<somefixedclass> 

在VB6

我知道 vb6 中存在集合,但它使用对象(变体)而不是特定对象。

谢谢。

最佳答案

在 VB 6 中没有与通用 List<T> 直接等效的功能。在 VB.NET 中找到。但是,有一个 Collection 这样的东西。在 VB 6 中,它提供了类似的功能。主要区别在于 VB 6 Collection不是强类型的,这意味着所有对象都存储为 Variants在集合中。在某些情况下,这可能是有益的,因为它允许您在同一个集合中存储许多不同类型的数据,事实上,VB 在内部使用这个对象。使用 Collection 很容易和向上转换的对象,因为它们是从类中检索出来的,但是您无能为力。在 VB 运行时中实现强类型集合是不可能的。

话虽如此,您可以实现一种解决方法。与在引入泛型之前在早期版本的 VB.NET 中实现集合的方式类似,你可以把 Collection在一个类中,唯一能访问到内部Collection的地方是通过您从此类中公开的方法 .这种设计模式通常被称为 “自定义收藏” .

这确实具有自动处理强制转换的好处,并减轻了代码的使用者必须记住记住这样的实现细节。它处理了(很可能)您将在运行时循环通过一个集合的可能性,该集合应该只包含一种类型的对象,但意外添加了第二种不兼容类型的对象,这会导致您的代码抛出异常。当然,缺点是您必须重新实现Collection 已经提供的大部分功能。以自定义集合上的公共(public)方法的形式反对自己。

下面是一个例子,说明你可以如何去做:

Public Class CustomerCollection

''#Internal collection, exposed by this class
Private m_Customers As Collection

Private Sub Class_Initialize()
''#Set up the internal collection
Set m_Customers = New Collection
End Sub

Public Sub Add(ByVal cust as Customer, Optional ByVal key as String)
''#Add the Customer object to the internal collection
If IsMissing(key) Then
m_Customers.Add cust
Else
m_Customers.Add cust, key
End If
End Sub

Public Property Get Count() As Integer
''#Return the number of objects in the internal collection
Count = m_Customers.Count
End Property

Public Sub Remove(ByVal index As Variant)
''#Remove the specified object from the internal collection,
''# either by its index or its key
m_Customers.Remove index
End Sub

Public Function Item(ByVal index As Variant) as Customer
''#Return the specified object from the internal collection,
''# either by its index or its key
Set Item = m_Customers.Item(index)
End Function

Public Sub Clear()
''#Removes all objects from the internal collection
Set m_Customers = New Collection
End Sub

End Class

请注意,为了设置自定义集合的 Item属性作为集合的默认方法(如内置的 Collection 对象),您需要在 VB 6 IDE 中执行以下步骤:
  • 从“工具”菜单中,单击“程序属性”
  • 从“名称”组合框中选择自定义类的名称。
  • 出现对话框时,单击“高级”按钮。
  • 在“过程 ID”组合框中选择“(默认)”项。
  • 点击“确定”

  • 如果您还想允许使用 For Each 枚举您的自定义类语法(也像内置的 Collection 对象),您可以添加 NewEnum函数到您的自定义类:
    Public Property Get NewEnum() As IUnknown
    ''#Provides support for enumeration using For Each
    Set NewEnum = m_Customers.[_NewEnum]
    End Property

    完成后,您需要指示 VB 使用此属性:
  • 和以前一样,从“工具”菜单中打开“程序属性”对话框
  • 从“名称”组合框中选择自定义类的名称。
  • 出现对话框时,单击“高级”按钮。
  • 在“程序 ID”组合框中键入数字“-4”。
  • 点击“确定”
  • 关于list - vb6 等价于 list<someclass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177708/

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