Estructuras y otros elementos de programación

Actualización: noviembre 2007

Se pueden utilizar estructuras conjuntamente con matrices, objetos y procedimientos, así como unos con otros. Las interacciones utilizan la misma sintaxis que utilizan estos elementos de forma individual.

Nota:

No puede inicializar ninguno de los elementos de la estructura en la declaración de la estructura. Sólo se pueden asignar valores a los elementos de una variable que se ha declarado como del tipo estructura.

Estructuras y matrices

Una estructura puede contener una matriz como uno o más de sus elementos. Esto se ilustra en el siguiente ejemplo:

Public Structure systemInfo
    Public cPU As String
    Public memory As Long
    Public diskDrives() As String
    Public purchaseDate As Date
End Structure 

Tiene acceso a los valores de una matriz dentro de una estructura de la misma manera que tiene acceso a una propiedad en un objeto. Esto se ilustra en el siguiente ejemplo:

Dim mySystem As systemInfo
ReDim mySystem.diskDrives(3)
mySystem.diskDrives(0) = "1.44 MB"

También puede declarar una matriz de estructuras. Esto se ilustra en el siguiente ejemplo:

Dim allSystems(100) As systemInfo

Se siguen las mismas reglas para tener acceso a los componentes de esta arquitectura de datos. Esto se ilustra en el siguiente ejemplo:

ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"

Estructuras y objetos

Una estructura puede contener un objeto como uno o más de sus elementos. Esto se ilustra en el siguiente ejemplo:

Protected Structure userInput
    Public userName As String
    Public inputForm As System.Windows.Forms.Form
    Public userFileNumber As Integer
End Structure

Se puede utilizar una clase de objeto específica en este tipo de declaración, en lugar de Object.

Estructuras y procedimientos

Puede pasar una estructura como un argumento de procedimiento. Esto se ilustra en el siguiente ejemplo:

Public currentCPUName As String = "700MHz Pentium compatible"
Public currentMemorySize As Long = 256
Public Sub fillSystem(ByRef someSystem As systemInfo)
    someSystem.cPU = currentCPUName
    someSystem.memory = currentMemorySize
    someSystem.purchaseDate = Now
End Sub

El ejemplo anterior pasa la estructura por referencia, lo que permite al procedimiento modificar sus elementos de tal forma que los cambios se hacen efectivos en el código de llamada. Si desea proteger una estructura frente a una modificación de este tipo, pásela por valor.

También puede devolver una estructura de un procedimiento Function. Esto se ilustra en el siguiente ejemplo:

Dim allSystems(100) As systemInfo
Function findByDate(ByVal searchDate As Date) As systemInfo
    Dim i As Integer
    For i = 1 To 100
        If allSystems(i).purchaseDate = searchDate Then Return allSystems(i)
    Next i
   ' Process error: system with desired purchase date not found.
End Function

Estructuras dentro de estructuras

Las estructuras pueden contener otras estructuras. Esto se ilustra en el siguiente ejemplo:

Public Structure driveInfo
    Public type As String
    Public size As Long
End Structure
Public Structure systemInfo
    Public cPU As String
    Public memory As Long
    Public diskDrives() As driveInfo
    Public purchaseDate As Date
End Structure
Dim allSystems(100) As systemInfo
ReDim allSystems(1).diskDrives(3)
allSystems(1).diskDrives(0).type = "Floppy"

También puede utilizar esta técnica para encapsular una estructura definida en un módulo dentro de una estructura definida en un módulo distinto.

Las estructuras pueden contener otras estructuras hasta cualquier nivel.

Vea también

Tareas

Solucionar problemas de tipos de datos

Cómo: Declarar una estructura

Conceptos

Tipos de datos en Visual Basic

Tipos de datos compuestos

Variables de estructura

Estructuras y clases

Recomendación de actualización: evitar matrices y cadenas de longitud fija en tipos definidos por el usuario

Referencia

Structure (Instrucción)

Otros recursos

Tipos de datos elementales

Implementación de tipos de datos

Estructuras: tipos de datos propios