構造体とその他のプログラミング要素

更新 : 2007 年 11 月

構造体は、配列、オブジェクト、プロシージャ、および他の構造体と組み合わせて使用できます。このやり取りには、各要素が個別に使用する構文が使用されます。

78kf2xd4.alert_note(ja-jp,VS.90).gifメモ :

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

構造体と配列

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

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

構造体は、任意の深さで入れ子にできます。

参照

処理手順

データ型のトラブルシューティング

方法 : 構造体を宣言する

概念

Visual Basic におけるデータ型

複合データ型

構造体の変数

構造体とクラス

アップグレードに関する推奨事項 : ユーザー定義型における配列および固定長文字列の不使用

参照

Structure ステートメント

その他の技術情報

基本データ型

データ型の実装

構造体 : 独自のデータ型