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.

Vedi anche