VBAにはクラスの継承は存在しないがインターフェースを定義・実装することができる。
インターフェースを定義する
クラスモジュールにインターフェースを定義する
インターフェースを定義するにはクラスモジュールに定義したいプロパティまたはメソッドを記述する。 ここではMessageInterface.cls
というクラスファイルを使用する
プロパティとメソッドを定義する
MessageInterface.cls
に記載
'プロパティを定義する
Public MessageMode As String
'空のメソッドを定義する
Public Sub Output(str)
End Sub
クラスでインターフェースを実装する
インターフェースを継承する
MessageInterface
を継承したクラスとしてDebugPrintLog
を作成する。 クラスモジュール内にimplentsキーワードを使用してMessageInterface
インターフェースを継承する
'DebugPrintLog.cls
'Implementsキーワードの後に継承するインターフェース名を記載する
Implements MessageInterface
プロパティを実装する
インターフェースでプロパティを定義したならばGetter
とSetter
でインターフェースで定義したプロパティの設定・取得を実装する必要がある
Public Property Get MessageInterface_MessageMode() As String
MessageInterface_MessageMode = mode
End Property
Private Property Let MessageInterface_MessageMode(ByVal RHS As String)
mode = RHS
End Property
メソッドを実装する
インターフェースで定義したメソッドを実装するためにはメソッド名がインターフェース名_メソッド名
の形になる
'DebugPrintLog.clsファイル
'MessageInterfaceのOutput()を実装する
Public Sub MessageInterface_Output(str)
Debug.Print "{ 型=> " & VarType(str) & ", 値=> " & str & " }"
End Sub
クライアント側での利用
インターフェースで定義したメソッドをクライアント側で呼び出すにはインターフェースで定義したメソッド名・プロパティ名で呼び出す
Public Sub Main()
Dim log As MessageInterface
Set log = New DebugPrintLog
log.Output ("success")
'出力:
'{ 型=> 8, 値=> success }
End Sub
サンプルコード
'MessageInterface.clsファイル
Public MessageMode As String
Public Sub Output(str)
End Sub
'DebugPrintLog.clsファイル
Implements MessageInterface
Private mode As String
Public Property Get MessageInterface_MessageMode() As String
MessageInterface_MessageMode = mode
End Property
Private Property Let MessageInterface_MessageMode(ByVal RHS As String)
mode = RHS
End Property
Public Sub MessageInterface_Output(str)
Debug.Print "{ 型=> " & VarType(str) _
& ", 値=> " & str & " }"
End Sub
Private Sub Class_Initialize()
mode = "DebugPrintMode"
End Sub
'Client.basファイル
Public Sub Main()
Dim log As MessageInterface
Set log = New DebugPrintLog
log.Output ("success")
End Sub