Share via


結構和其他程式設計項目 (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"  

您也可以使用這項技術,來封裝在不同模組中定義之結構內的一個模組中定義的結構。

結構可以包含其他結構到任意的深度。

另請參閱