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.