列挙型(Enum)
列挙型は主に特定の値を指定して処理を分岐したり、引数の値を明確したりする場合に使用します。
型の宣言にはEnumを使用し、格納できるのは整数(Byte,Short,Integer,Long)のみで既定の型はIntegerです。
メンバに値を指定しない場合、0から順にインクリメントされて設定されます。
列挙型で宣言した変数へは通常 列挙型.メンバ を使用しますが、宣言した型の値なら直接セットすることも可能です。この場合、メンバに保有していない値でも格納できてしまうことに注意してください。
'*** 列挙型の宣言
Enum DayOfTheWeek
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
End Enum
'*** 列挙型の使用
Dim youbi As DayOfTheWeek
'*** 設定
youbi = DayOfTheWeek.Monday
'*** 直接値を設定できるが、範囲外の値も格納できてしまう
youbi = 8
構造体
構造体はメンバ変数やプロパティ、メソッドを持つ値型の定義です。
宣言にはStructureを使用します。
'*** 構造体の宣言
Private Structure Data
Public Property Value As Integer
Public Sub Work()
'*** 処理
End Sub
Public Function IsValue() As Boolean
Return Me.Value >= 1
End Function
End Structure
'*** 構造体の使用
Dim wk As New Data
wk.Value = 1
wk.Work()
Dim ret = wk.IsValue
クラス
クラスはメンバ変数やプロパティ、メソッドを持つ参照型の定義です。
宣言にはClassを使用します。
'*** クラスの宣言
Private Class Data
Public Property Value As Integer
Public Sub Work()
'*** 処理
End Sub
Public Function IsValue() As Boolean
Return Me.Value >= 1
End Function
End Class
'*** クラスの使用
Dim wk As New Data
wk.Value = 1
wk.Work()
Dim ret = wk.IsValue
クラスと構造体の違い
クラスと構造体の違いは先に書いたように、参照型か値型かの違いになります。また、クラスは使用時にNewステートメントでインスタンスを作る必要がありますが、構造体ではNewステートメントは無くても使用できます。
クラスと構造体の使い分け
構造体とクラスはどちらも同様の使い方が出来ますが、特製の違いから使い分けが必要です。
構造体は値型の為、インスタンスのサイズが大きいとインスタンスの代入やByVal渡し、メソッドの戻り値等で使用するとデータをコピーする作業に時間がかかります。その為、インスタンスのサイズが大きくなる場合、基本的にクラスを選択するべきです。
Microsoft Docsにて指標が出ておりますが、この指標に沿うとほぼ構造体の出番がなくなります。ですが、標準機能でもこの指標に沿っていないものも多々あり、レスポンスを重視するシステムでは、最終的にはベンチマークをとってどちらの方が良いか決めていくようにしてください。