サーチ…
前書き
インターフェイスは、クラスが実行する一連の振る舞いを定義する方法です。インターフェースの定義は、メソッドのシグニチャー(名前、パラメーター、戻りタイプ)のリストです。すべてのメソッドを持つクラスは、そのインターフェイスを「実装する」と言われています。
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
水泳チェック...
水に浮かぶ
水の下での水泳