Strutture e altri elementi di programmazione (Visual Basic)
È possibile usare strutture in combinazione con matrici, oggetti e routine, nonché tra loro. Le interazioni usano la stessa sintassi usata singolarmente da questi elementi.
Nota
Non è possibile inizializzare alcun elemento della struttura nella dichiarazione della struttura. È possibile assegnare valori solo agli elementi di una variabile dichiarata come di un tipo di struttura.
Strutture e matrici
Una struttura può contenere una matrice come uno o più dei relativi elementi. Ciò è illustrato nell'esempio seguente.
Public Structure systemInfo
Public cPU As String
Public memory As Long
Public diskDrives() As String
Public purchaseDate As Date
End Structure
È possibile accedere ai valori di una matrice all'interno di una struttura allo stesso modo in cui si accede a una proprietà in un oggetto. Ciò è illustrato nell'esempio seguente.
Dim mySystem As systemInfo
ReDim mySystem.diskDrives(3)
mySystem.diskDrives(0) = "1.44 MB"
È anche possibile dichiarare una matrice di strutture. Ciò è illustrato nell'esempio seguente.
Dim allSystems(100) As systemInfo
Seguire le stesse regole per accedere ai componenti di questa architettura dei dati. Ciò è illustrato nell'esempio seguente.
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"
Strutture e oggetti
Una struttura può contenere un oggetto come uno o più dei relativi elementi. Ciò è illustrato nell'esempio seguente.
Protected Structure userInput
Public userName As String
Public inputForm As System.Windows.Forms.Form
Public userFileNumber As Integer
End Structure
Invece di Object
è consigliabile usare una classe oggetto specifica in una dichiarazione di questo tipo.
Strutture e routine
È possibile passare una struttura come argomento di routine. Ciò è illustrato nell'esempio seguente.
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
Nell'esempio precedente la struttura viene passata per riferimento, per consentire alla routine di modificare i relativi elementi in modo che le modifiche vengano applicate nel codice chiamante. Se si vuole proteggere una struttura da tali modifiche, passarla per valore.
È anche possibile restituire una struttura da una routine Function
. Ciò è illustrato nell'esempio seguente.
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
Strutture all'interno di strutture
Le strutture possono contenere altre strutture. Ciò è illustrato nell'esempio seguente.
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"
È anche possibile usare questa tecnica per incapsulare una struttura definita in un modulo all'interno di una struttura definita in un modulo diverso.
Le strutture possono contenere altre strutture a un livello di profondità arbitrario.