小窓
クラス [VB.NET]

作成日:2022/5/8

ひろにもブログ

構造体

構造体とは既存のデータ型を組み合わせた構造を持つ型のことです。 構造体では複数の値(データ型)を組み合わせることにより、それらに意味を持たせた一つの型を作成することができます。 VB6以前でユーザー定義型と呼ばれていたものは、VB.NETでは構造体という名称に変わり、クラスと同様に構造体がプロシージャ(メソッド)を持つことができるようになっているなど、機能も大幅に強化されています。

構造体を宣言する際の命名基準について、VB.NETでは構造体の場合もクラスと同様の命名方法、つまりすべて大文字からなる名前は付けないようにガイドラインで定められています。 (例えば、RECTよりはRectが推奨される) ただ、あくまで指針であるので、わかりやすさが維持される限りは自由に名前を付けることができます。

構造体の宣言

構造体(Structure)は下記のように定義する。
(見分けやすい様にコメント部は緑色で表示している。)

Public Class Form1

  Structure 出席者
    Dim 出席番号 As Integer
    Dim 氏名 As String
    Dim 年齢 As Integer
  End Structure

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    ' メソッド内(この場合はSubプロシージャ内)にStructureの宣言を記述してはならない。

  End Sub
End Class
この構造体の使用例

(見分けやすい様にコメント部は緑色で表示している。)

Public Class Form1

  Structure 出席者 ' (1) 構造体「出席者」を宣言している。
    Dim 出席番号 As Integer
    Dim 氏名 As String
    Dim 年齢 As Integer
  End Structure

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim 出席者一覧 As 出席者 ' (2) 変数「出席者一覧」を宣言している。

    出席者一覧.出席番号 = 123 ' (3) 変数「出席者一覧」の各メンバーに値を設定する。
    出席者一覧.氏名 = "誰の誰兵衛"
    出席者一覧.年齢 = 25

    Debug.WriteLine(出席者一覧.氏名) ' (4) 確認のために氏名を表示している。
  End Sub
End Class
この構造体の使用例(配列で使用している)

前項で構造体の使用法を解説した。
構造体の型を持つ変数は、配列で宣言することも多い。
ここでは、前項の場合と同様の例で、構造体「出席者」を使用している変数が配列である場合の例を解説する。
ただし、前項との違いは2箇所だけである。(説明文の解説箇所と下記の使用例の該当箇所をで表示している)
  • 変数の宣言時に配列の要素数を指定する。
  • フィールドの参照時にインデックス(添字)を指定する。

(見分けやすい様にコメント部は緑色で表示している。)

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim 出席者一覧(21) As 出席者 ' (1) 変数(配列)「出席者一覧」を宣言している。

    出席者一覧(5).出席番号 = 123 ' (2) 変数「出席者一覧」の各メンバーに値を設定する。
    出席者一覧(5).氏名 = "誰の誰兵衛"
    出席者一覧(5).年齢 = 25

    Debug.WriteLine(出席者一覧(5).氏名) ' (3) 確認のために氏名を表示している。
  End Sub
End Class
構造体にメソッドを持たせる

構造体にはメソッドを持たせることができる。
この構造体の使用例」では、 個々のメンバに値をセットしているが、 ここでは全て(3個)のメンバに値をセットするメソッドを追加する。
(見分けやすい様にコメント部は緑色で表示している。)

Public Class Form1

  Structure 出席者 ' (1) 構造体「出席者」を宣言している。
    Dim 出席番号 As Integer
    Dim 氏名 As String
    Dim 年齢 As Integer

    '  (2)メソッドの追加
    Sub 出席者情報のセット(ByVal 出席番号 As Integer,
                 ByVal 氏名 As String,
                 ByVal 年齢 As Integer)
      Me.出席番号 = 出席番号
      Me.氏名 = 氏名
      Me.年齢 = 年齢
    End Sub
  End Structure

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim 出席者一覧 As 出席者 ' (3) 変数「出席者一覧」を宣言している。

    出席者一覧.出席者情報のセット(123, "誰の誰兵衛", 25) ' (4) 変数「出席者一覧」の各メンバーに値を設定する。

    Debug.WriteLine(出席者一覧.氏名) ' (5) 確認のために氏名を表示している。
  End Sub
End Class