Estruturas e outros elementos de programação (Visual Basic)
Você pode usar estruturas em conjunto com matrizes, objetos e procedimentos, bem como entre si. As interações usam a mesma sintaxe que esses elementos usam individualmente.
Observação
Não é possível inicializar nenhum dos elementos de estrutura na declaração de estrutura. Você pode atribuir valores somente a elementos de uma variável que foi declarada como de um tipo de estrutura.
Estruturas e matrizes
Uma estrutura pode conter uma matriz como um ou mais de seus elementos. O exemplo a seguir ilustra essa situação.
Public Structure systemInfo
Public cPU As String
Public memory As Long
Public diskDrives() As String
Public purchaseDate As Date
End Structure
Você acessa os valores de uma matriz dentro de uma estrutura da mesma forma que acessa uma propriedade em um objeto. O exemplo a seguir ilustra essa situação.
Dim mySystem As systemInfo
ReDim mySystem.diskDrives(3)
mySystem.diskDrives(0) = "1.44 MB"
Você também pode declarar uma matriz de estruturas. O exemplo a seguir ilustra essa situação.
Dim allSystems(100) As systemInfo
Você segue as mesmas regras para acessar os componentes dessa arquitetura de dados. O exemplo a seguir ilustra essa situação.
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"
Estruturas e objetos
Uma estrutura pode conter um objeto como um ou mais de seus elementos. O exemplo a seguir ilustra essa situação.
Protected Structure userInput
Public userName As String
Public inputForm As System.Windows.Forms.Form
Public userFileNumber As Integer
End Structure
Você deve usar uma classe de objeto específica em tal declaração, em vez de Object
.
Estruturas e procedimentos
Você pode passar uma estrutura como um argumento de procedimento. O exemplo a seguir ilustra essa situação.
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
O exemplo anterior passa a estrutura por referência, o que permite que o procedimento modifique seus elementos para que as alterações entrem em vigor no código de chamada. Se você quiser proteger uma estrutura contra essa modificação, passe-a por valor.
Você também pode retornar uma estrutura de um Function
procedimento. O exemplo a seguir ilustra essa situação.
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
Estruturas dentro de estruturas
Estruturas podem conter outras estruturas. O exemplo a seguir ilustra essa situação.
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"
Você também pode usar essa técnica para encapsular uma estrutura definida em um módulo dentro de uma estrutura definida em um módulo diferente.
Estruturas podem conter outras estruturas a uma profundidade arbitrária.