VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • 如何:定义类型安全集合 (Visual Basic)

可以使用由 Visual Basic 提供的 Collection 类来定义和创建集合,如以下示例所示。

VB
Public Class widgetRepository
    Public widgetColl As New Microsoft.VisualBasic.Collection()
    ' Insert code to implement additional functionality.
End Class

但是,此 widgetColl 集合并非为强类型。 不仅可以向它添加 widget 对象,还可以添加任何类型的元素。 在检索元素时,可能要尝试将其转换为 widget。 这可能导致类型安全问题。 例如,假设使用以下代码向集合添加了一个 String。

VB
Dim notWidget As String = "This is not a widget object!"
widgetColl.Add(notWidget)

如果这样做,则在此后尝试检索该元素时,会在运行时引发 ArgumentException 异常,原因是此集合元素的类型不是 widget。

预防类型安全问题

我们建议您通过定义泛型类最大程度地增强类型的安全性。 这会强制实施强类型,同时还提供了它在处理特定的数据类型时的灵活性。 有关更多信息,请参见 Visual Basic 中的泛型类型 (Visual Basic)。

在类中定义类型安全的集合

  • 将 System.Collections.Generic 命名空间中的一个泛型类(如 List<T>)用于您的集合类。 然后,可以创建一个只限制为 widget 成员的集合。 下面的示例说明可以如何修改前面示例中的声明,以创建一个泛型集合。

    VB
    Public widgetColl As New System.Collections.Generic.List(Of widget)
    

    在这样做时,强类型使您只能向集合中添加 widget 项,您通过 Item 属性检索的每个元素均为 widget 对象。 也由于此强类型的缘故,检索代码可以使用 widget 公开的所有属性和方法。

    - 或 -

  • 在不使用任何预定义类的情况下创建您自己的集合类。 将 Add 方法限制为只接受 widget 对象,并实现 Item 属性(返回类型为 widget)。 有关更多信息,请参见如何:定义类型安全集合 (Visual Basic)。

    如果 Item 返回了 Object 类型的元素,您将只能显式访问在 Object 类上定义的属性和方法。 要访问 widget 成员,必须设置 Option Strict Off,或使用 CType 函数 (Visual Basic) 显式地将返回的元素转换为 widget,如以下代码所示。

    VB
    Dim nextWidget As widget
    Try
        nextWidget = CType(widgetColl.Item(1), widget)
    Catch ex As Exception
        ' Insert code to run if the collection item is not a widget.
    End Try
    

    在以上任一情况中,按此方式使用 Object 元素会导致 Visual Basic 使用后期绑定,这将使性能下降。

    请注意,Visual Basic Collection 类接受并返回 Object 元素,因此,它也具有弱类型和后期绑定的缺点。


    原文链接:https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/ms235257(v=vs.100)


相关教程