メンバ変数へのアクセスはプロパティで行う。コンストラクタの引数でメンバ変数へ値を設定することはできない。検索すると裏技で対応方法がいろいろ公開されているが、後々意味が分からなくなりそうなので使用せずプロパティで行うこと。
引数の無いプロシージャはカッコ不要。
引数はByValを使用する?
クラスの定義
クラスモジュールに作成する。
Option Explicit
' メンバ変数
Private mVal As Long
' コンストラクタ
Private Sub Class_Initialize()
MsgBox "コンストラクタが実行されました。"
End Sub
' デストラクタ
Private Sub Class_Terminate()
MsgBox "デストラクタが実行されました。"
End Sub
' プロパティ(Getter)
Public Property Get Val() As Long
Val = mVal
End Property
' プロパティ(Setter)
Public Property Let Val(ByVal newVal As Long)
mVal = newVal
End Property
Public Sub Inc()
mVal = mVal + 1
End Sub
Public Sub Add(ByVal addVal As Long)
mVal = mVal + addVal
End Sub
Public Function Equal(ByVal eqVal As Long) As Boolean
If mVal = eqVal Then
Equal = True
Else
Equal = False
End If
End Function
呼び出し側
Sub foo()
Dim a As MyClass
Set a = New MyClass ' コンストラクタ実行
a.Val = 100 ' 引数の形でなく、代入で値を設定する。
MsgBox a.Val '=> 100
a.Inc ' カッコを付けない
MsgBox a.Val '=> 101
a.Add (10)
MsgBox a.Val ' => 111
MsgBox a.Equal(111) '=> True
Set a = Nothing ' デストラクタ実行
End Sub