Estructuras y otros elementos de programación (Visual Basic)

Puede usar estructuras junto con matrices, objetos y procedimientos, así como entre sí. Las interacciones usan la misma sintaxis que estos elementos usan individualmente.

Nota

No se puede inicializar ninguno de los elementos de la estructura en la declaración de estructura. Solo puede asignar valores a los elementos de una variable declarada como de un tipo de estructura.

Estructuras y matrices

Una estructura puede contener una matriz como uno o varios 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

Puede acceder a los valores de una matriz dentro de una estructura de la misma manera que accede 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  

Siga las mismas reglas para acceder 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 varios 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  

Debe usar una clase de objeto específica en esta declaración, en lugar de Object.

Estructuras y procedimientos

Puede pasar una estructura como 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  

En el ejemplo anterior se pasa la estructura por referencia, lo que permite al procedimiento modificar sus elementos para que los cambios surtan efecto en el código de llamada. Si desea proteger una estructura frente a esa modificación, pásela por valor.

También puede devolver una estructura desde 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 usar esta técnica para encapsular una estructura definida en un módulo dentro de una estructura definida en un módulo diferente.

Las estructuras pueden contener otras estructuras a una profundidad arbitraria.

Consulte también