Colecciones en Visual Basic

Actualización: noviembre 2007

En términos generales, una colección es un objeto utilizado para agrupar y administrar objetos relacionados. Por ejemplo, cada formulario Form tiene una colección de controles. (Puede tener acceso a esta colección a través de la propiedad Controls del formulario.) Esta colección es un objeto que representa todos los controles de ese formulario. Le permite recuperar un control de la colección utilizando su índice y recorrer en iteración los elementos de la colección utilizando una Instrucción For Each...Next (Visual Basic).

Sin embargo, hay varios tipos de colecciones y se diferencian entre sí de varias maneras.

Diferentes tipos de colecciones

Visual Basic también proporciona una clase Collection, con la que puede definir y crear sus propias colecciones. Al igual que la colección Controls de un formulario, la clase Collection también proporciona la funcionalidad integrada que permite recorrer en iteración los miembros mediante For Each...Next y recuperar los elementos usando su índice. Para obtener más información, vea Collection (Objeto, Visual Basic).

Sin embargo, los dos tipos de colecciones no interoperan entre sí. Por ejemplo, el código siguiente genera un error del compilador:

Dim localControls As Collection

' The following line generates a COMPILER ERROR.

localControls = Me.Controls()

Las colecciones son incompatibles porque la colección Controls es una colección de .NET Framework, mientras que la variable localControls es una Collection de Visual Basic. Los dos tipos de colecciones se implementan a partir de distintas clases. Sus métodos son similares pero no idénticos y sus esquemas de indización son diferentes.

Colecciones basadas en cero y en uno

Una colección puede ser basada en cero o basada en uno, según cuál sea su índice de comienzo. La primera de ellas significa que el índice del primer elemento de la colección es 0, y la última, que es 1. Un ejemplo de colección basada en cero es la colección Controls de .NET Framework, explicada anteriormente en esta página. El objeto Collection de Visual Basic es un ejemplo de una colección basada en uno.

Las colecciones basadas en uno pueden resultar más intuitivas para los usuarios de Visual Basic, porque el intervalo del índice se extiende desde 1 hasta el valor de Count (Propiedad, objeto Collection), que devuelve el número de elementos existentes en una colección. En cambio, el índice de una colección basada en cero varía desde cero hasta el valor de la propiedad Count menos uno. Esto puede ser adecuado cuando los valores de índice son desplazamientos respecto a un valor base o corresponder a miembros de una enumeración basada en cero.

Las colecciones de .NET Framework están basadas en cero con el fin de seguir un esquema estándar. La clase Collection de Visual Basic está basada en uno con el fin de proporcionar compatibilidad con versiones anteriores.

Valores de índice y de clave

Las instancias de la clase Collection de Visual Basic permiten tener acceso a un elemento utilizando un índice numérico o una clave String. Puede agregar elementos a los objetos Collection de Visual Basic especificando una clave o sin especificarla. Si agrega un elemento sin una clave, debe utilizar su índice numérico para tener acceso a él.

Por contraste, las colecciones como System.Collections.ArrayList sólo permiten un índice numérico. No se pueden asociar claves con los elementos de estas colecciones, a menos que construya las suyas propias basadas en asignaciones, por ejemplo, en una matriz de String que contiene las claves.

Agregar y quitar elementos

Las colecciones se diferencian en si se les puede o no agregar elementos y, en caso afirmativo, en cómo se pueden agregar. Puesto que el objeto Collection de Visual Basic es una herramienta de programación de uso general, es más flexible que algunas otras colecciones. Tiene un Add (Método, objeto Collection) para colocar elementos en la colección y un Remove (Método, objeto Collection) para quitar elementos de ella.

Por otra parte, ciertas colecciones especializadas no permiten agregar o quitar elementos mediante código. Por ejemplo, la propiedad CheckedListBox.CheckedItems devuelve una colección de referencias a elementos por índice, pero su código no puede agregar elementos a la colección ni quitarlos de ella. Sólo el usuario puede hacer esta operación, activando o desactivando la casilla de verificación correspondiente en la interfaz de usuario. Por tanto, no hay ningún método Add ni Remove para esta colección.

Vea también

Tareas

Cómo: Crear una colección de objetos

Cómo: Crear una matriz de objetos

Cómo: Agregar, eliminar y recuperar los elementos de una colección

Cómo: Definir colecciones en clases propias

Cómo: Recorrer en iteración una colección de Visual Basic

Solucionar problemas de colecciones

Conceptos

Administrar grupos de objetos

Clase de colección de Visual Basic

Administrar objetos propios con colecciones