Cómo: Definir colecciones con seguridad de tipos
Actualización: noviembre 2007
Puede definir y crear una colección utilizando la clase Collection proporcionada por Visual Basic, como muestra el ejemplo siguiente.
Public Class widgetRepository
Public widgetColl As New Microsoft.VisualBasic.Collection()
' Insert code to implement additional functionality.
End Class
Sin embargo, esta colección widgetColl no dispone de establecimiento inflexible de tipos. En ella puede agregar cualquier tipo de elemento, no sólo objetos widget. Cuando recupera un elemento, puede que deba intentar convertirlo en widget. Esto puede conducir a problemas de seguridad de tipos. Por ejemplo, suponga que agrega un objeto tipo String a la colección con el código siguiente.
Dim notWidget As String = "This is not a widget object!"
widgetColl.Add(notWidget)
En este caso, un intento posterior de recuperar dicho elemento produce una excepción ArgumentException en tiempo de ejecución ya que el elemento de la colección no es del tipo widget.
Protección contra los problemas de seguridad de tipos
Recomendamos que aumente la seguridad de tipos definiendo una clase genérica. Así se exige el establecimiento inflexible de tipos se consigue flexibilidad en el tipo de datos concreto con el que trabaja. Para obtener más información, vea Tipos genéricos en Visual Basic.
Para definir una colección con seguridad de tipos en una clase
Utilice una de las clases genéricas en el espacio de nombres System.Collections.Generic, por ejemplo List<T>, para la clase de colección. A continuación, puede crear una colección que se restringe a los miembros widget. El ejemplo siguiente muestra cómo se podría modificar la declaración del ejemplo anterior para crear una colección genérica.
Public widgetColl As New System.Collections.Generic.List(Of widget)
En este caso, el establecimiento inflexible de tipos sólo permite agregar elementos widget a la colección y cada elemento que se recupera por medio de la propiedad Item es un objeto widget. Debido al establecimiento inflexible de tipos, el código de recuperación también puede utilizar todas las propiedades y los métodos expuestos por widget.
O bien
Cree su propia clase de colección sin utilizar ninguna clase predefinida. Restrinja el método Add para que sólo acepte objetos widget e implemente la propiedad Item con un tipo de valor devuelto de widget. Para obtener más información, vea Cómo: Definir colecciones con seguridad de tipos.
Si Item devuelve elementos de tipo Object, sólo tendría acceso explícito a las propiedades y métodos definidos en la clase Object. Para tener acceso a los miembros de widget, debería activar Option Strict Off o utilizar CType (Función) para convertir de forma explícita el elemento devuelto a widget, como en el código siguiente.
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
En cualquiera de los casos, si utiliza los elementos Object de esta manera, Visual Basic emplea el enlace en tiempo de ejecución, lo que reduce el rendimiento.
Tenga en cuenta que la clase Collection de Visual Basic acepta y devuelve elementos Object, por lo que también tiene las desventajas de los tipos flexibles y el enlace en tiempo de ejecución.
Vea también
Conceptos
Clase de colección de Visual Basic
Tipos genéricos en Visual Basic