結構和其他程式設計項目 (Visual Basic)
結構可與陣列、物件及程序彼此結合使用。 這些項目之間互動所使用的語法與其個別使用的語法相同。
注意事項 |
---|
您無法在結構宣告中初始化任何結構項目。 您只能將值指派給已宣告為結構型別 (Structure Type) 的變數項目。 |
結構與陣列
結構可包含一個陣列做為其一個或多個元素。 下列範例將說明這點。
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
您必須遵守相同的規則 (Rule) 以存取此資料架構的元件。 下列範例將說明這點。
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
前述範例將結構以「傳址方式」(By Reference) 傳遞,讓程序能夠修改其元素,使變更在呼叫程式碼中產生效用。 若您不希望結構進行這類修改,則請以傳值 (By Value) 方式傳遞。
您也可以從 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"
您也可以使用同樣的方法將一模組所定義的結構封裝到另一不同模組所定義的結構之中。
結構可以包含其他結構達任意多層。