構造体およびその他のプログラミング要素 (Visual Basic)

構造体は、配列、オブジェクト、およびプロシージャと組み合わせて使用したり、相互に使用し合ったりすることができます。 この相互作用には、これらの要素で個別に使用されるものと同じ構文が使用されます。

Note

構造体宣言で構造体の要素を初期化することはできません。 構造型であると宣言されている変数の要素にのみ、値を割り当てることができます。

構造体と配列

構造体には、配列を 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"  

この手法を使用して、あるモジュールで定義された構造体を別のモジュールで定義された構造体内にカプセル化することもできます。

構造体には、任意の深さで他の構造体を含めることができます。

関連項目