サーチ…


前書き

インターフェイスは、クラスが実行する一連の振る舞いを定義する方法です。インターフェースの定義は、メソッドのシグニチャー(名前、パラメーター、戻りタイプ)のリストです。すべてのメソッドを持つクラスは、そのインターフェイスを「実装する」と言われています。

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番目のクラスモジュールであるDuckFlyable実装しています:

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

サブルーチンはAirplaneDuck両方で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

水泳チェック...

水に浮かぶ

水の下での水泳



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow