構造体は、配列、オブジェクト、プロシージャ、および相互に組み合わせて使用できます。 相互作用では、これらの要素が個別に使用するのと同じ構文が使用されます。
注
構造体宣言で構造体要素を初期化することはできません。 構造体型として宣言されている変数の要素にのみ値を割り当てることができます。
構造体と配列
構造体には、1 つ以上の要素として配列を含めることができます。 この例を次に示します。
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"
構造体とオブジェクト
構造体には、1 つ以上の要素としてオブジェクトを含めることができます。 この例を次に示します。
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"
また、この手法を使用して、別のモジュールで定義されている構造体内の 1 つのモジュールで定義された構造体をカプセル化することもできます。
構造体には、任意の深さに対して他の構造体を含めることができます。
こちらも参照ください
.NET