Struktury a ostatní programovací elementy (Visual Basic)
Struktury můžete používat ve spojení s poli, objekty a postupy, stejně jako s ostatními. Interakce používají stejnou syntaxi jako tyto prvky jednotlivě.
Poznámka:
V deklaraci struktury nelze inicializovat žádné prvky struktury. Hodnoty lze přiřadit pouze prvkům proměnné, která byla deklarována jako typ struktury.
Struktury a pole
Struktura může obsahovat pole jako jeden nebo více jeho prvků. Toto dokládá následující příklad.
Public Structure systemInfo
Public cPU As String
Public memory As Long
Public diskDrives() As String
Public purchaseDate As Date
End Structure
K hodnotám pole v rámci struktury přistupujete stejným způsobem jako k vlastnosti objektu. Toto dokládá následující příklad.
Dim mySystem As systemInfo
ReDim mySystem.diskDrives(3)
mySystem.diskDrives(0) = "1.44 MB"
Můžete také deklarovat pole struktur. Toto dokládá následující příklad.
Dim allSystems(100) As systemInfo
Pro přístup ke komponentám této datové architektury se řídíte stejnými pravidly. Toto dokládá následující příklad.
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"
Struktury a objekty
Struktura může obsahovat objekt jako jeden nebo více jeho prvků. Toto dokládá následující příklad.
Protected Structure userInput
Public userName As String
Public inputForm As System.Windows.Forms.Form
Public userFileNumber As Integer
End Structure
V takové deklaraci byste měli použít konkrétní třídu objektu, nikoli Object
.
Struktury a procedury
Strukturu můžete předat jako argument procedury. Toto dokládá následující příklad.
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
Předchozí příklad předá strukturu odkazem, což umožňuje postupu upravit jeho prvky tak, aby se změny projevily ve volajícím kódu. Pokud chcete chránit strukturu před takovou úpravou, předejte ji hodnotou.
Strukturu můžete vrátit také z Function
procedury. Toto dokládá následující příklad.
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
Struktury v rámci struktur
Struktury mohou obsahovat jiné struktury. Toto dokládá následující příklad.
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"
Tuto techniku můžete použít také k zapouzdření struktury definované v jednom modulu v rámci struktury definované v jiném modulu.
Struktury mohou obsahovat jiné struktury na libovolnou hloubku.