結構和其他程式設計項目 (Visual Basic)
您可以將結構與陣列、物件和程序結合使用,也可以相互結合使用。 互動會使用與這些元素個別使用相同的語法。
注意
您無法初始化結構宣告中的任何結構元素。 您只能將值指派給已宣告為屬於某一個結構類型的變數元素。
結構和陣列
一個結構可以包含一個陣列作為它的一個或多個元素。 說明如下例。
Public Structure systemInfo
Public cPU As String
Public memory As Long
Public diskDrives() As String
Public purchaseDate As Date
End Structure
您可以像存取物件上的屬性一樣的方式來存取結構內陣列的值。 說明如下例。
Dim mySystem As systemInfo
ReDim mySystem.diskDrives(3)
mySystem.diskDrives(0) = "1.44 MB"
您也可以宣告結構的陣列。 說明如下例。
Dim allSystems(100) As systemInfo
您可以遵循相同的規則來存取此資料架構的元件。 說明如下例。
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"
結構和物件
一個結構可以包含一個物件作為它的一個或多個元素。 說明如下例。
Protected Structure userInput
Public userName As String
Public inputForm As System.Windows.Forms.Form
Public userFileNumber As Integer
End Structure
您應該在這類宣告 (而不是 Object
) 中使用特定的物件類別。
結構和程序
您可以將結構作為程序引數來傳遞。 說明如下例。
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
上面的範例透過參照傳遞了結構,這可讓程序修改其元素,以便變更在呼叫程式碼中生效。 如果您想要保護結構不受這樣的修改,請透過值來傳遞它。
您也可以從 Function
程序中傳回結構。 說明如下例。
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
結構內的結構
結構可以包含其他結構。 說明如下例。
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"
您也可以使用這項技術,來封裝在不同模組中定義之結構內的一個模組中定義的結構。
結構可以包含其他結構到任意的深度。