サーチ…
前書き
インターフェイスは、クラスが実行する一連の振る舞いを定義する方法です。インターフェースの定義は、メソッドのシグニチャー(名前、パラメーター、戻りタイプ)のリストです。すべてのメソッドを持つクラスは、そのインターフェイスを「実装する」と言われています。
VBAでは、インターフェイスを使用することで、モジュールがすべてのメソッドを実装していることをコンパイラが確認できます。変数またはパラメータは、特定のクラスの代わりにインタフェースの観点から定義することができます。
シンプルなインターフェイス - Flyable
Flyableインタフェースは、次のコードを持つクラスモジュールです。
Public Sub Fly()
' No code.
End Sub
Public Function GetAltitude() As Long
' No code.
End Function
ClassモジュールのAirplaneは、 Flyable_Fly()サブ関数とLongを返すFlyable_GetAltitude()関数の2つのメソッドがないかぎり、 Implementsキーワードを使用してエラーを発生させます。
Implements Flyable
Public Sub Flyable_Fly()
Debug.Print "Flying With Jet Engines!"
End Sub
Public Function Flyable_GetAltitude() As Long
Flyable_GetAltitude = 10000
End Function
2番目のクラスモジュールであるDuckもFlyable実装しています:
Implements Flyable
Public Sub Flyable_Fly()
Debug.Print "Flying With Wings!"
End Sub
Public Function Flyable_GetAltitude() As Long
Flyable_GetAltitude = 30
End Function
私たちは、 Flyable値を受け入れ、 FlyまたはGetAltitudeコマンドに応答することを知っているルーチンを書くことができます:
Public Sub FlyAndCheckAltitude(F As Flyable)
F.Fly
Debug.Print F.GetAltitude
End Sub
インターフェイスが定義されているため、IntelliSenseポップアップウィンドウにF FlyおよびGetAltitudeが表示されます。
次のコードを実行すると:
Dim MyDuck As New Duck
Dim MyAirplane As New Airplane
FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane
出力は次のとおりです。
Flying With Wings!
30
Flying With Jet Engines!
10000
サブルーチンはAirplaneとDuck両方でFlyable_Flyという名前が付けられていますが、変数またはパラメータがFlyableとして定義されている場合は、 Flyとして呼び出すことができます。変数が特にDuckとして定義されている場合は、 Flyable_FlyとしてFlyable_Flyます。
1つのクラスの複数のインターフェース - 飛行可能でスイム可能
Flyable例を出発点として、 Swimmableという2番目のインターフェイスを次のコードで追加できます。
Sub Swim()
' No code
End Sub
Duckオブジェクトは飛行と水泳の両方をImplementできます:
Implements Flyable
Implements Swimmable
Public Sub Flyable_Fly()
Debug.Print "Flying With Wings!"
End Sub
Public Function Flyable_GetAltitude() As Long
Flyable_GetAltitude = 30
End Function
Public Sub Swimmable_Swim()
Debug.Print "Floating on the water"
End Sub
FishクラスでもSwimmableを実装できます:
Implements Swimmable
Public Sub Swimmable_Swim()
Debug.Print "Swimming under the water"
End Sub
ここで、 Duckオブジェクトは、一方ではFlyableとしてSubに、もう一方ではSwimmableとして渡すことができます。
Sub InterfaceTest()
Dim MyDuck As New Duck
Dim MyAirplane As New Airplane
Dim MyFish As New Fish
Debug.Print "Fly Check..."
FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane
Debug.Print "Swim Check..."
TrySwimming MyDuck
TrySwimming MyFish
End Sub
Public Sub FlyAndCheckAltitude(F As Flyable)
F.Fly
Debug.Print F.GetAltitude
End Sub
Public Sub TrySwimming(S As Swimmable)
S.Swim
End Sub
このコードの出力は次のとおりです。
フライチェック...
翼で飛んで!
30
ジェットエンジンで飛ぶ!
10000
水泳チェック...
水に浮かぶ
水の下での水泳