Suche…
Einführung
Eine Schnittstelle ist eine Möglichkeit, eine Gruppe von Verhalten zu definieren, die eine Klasse ausführt. Die Definition einer Schnittstelle ist eine Liste von Methodensignaturen (Name, Parameter und Rückgabetyp). Eine Klasse mit allen Methoden soll diese Schnittstelle "implementieren".
In VBA kann der Compiler mithilfe von Interfaces überprüfen, ob ein Modul alle seine Methoden implementiert. Eine Variable oder ein Parameter kann in Form einer Schnittstelle anstelle einer bestimmten Klasse definiert werden.
Einfache Schnittstelle - flugfähig
Die Schnittstelle Flyable
ist ein Klassenmodul mit dem folgenden Code:
Public Sub Fly()
' No code.
End Sub
Public Function GetAltitude() As Long
' No code.
End Function
Ein Klassenmodul, Airplane
, verwendet das Implements
Schlüsselwort, um dem Compiler mitzuteilen, dass ein Fehler Flyable_Fly()
es sei denn, es gibt zwei Methoden: ein Flyable_Fly()
Sub und eine Flyable_GetAltitude()
Funktion, die ein Long
zurückgibt.
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
Ein zweites Klassenmodul, Duck
, implementiert auch 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
Wir können eine Routine schreiben, die einen beliebigen Flyable
Wert akzeptiert und weiß, dass er auf einen Befehl von Fly
oder GetAltitude
:
Public Sub FlyAndCheckAltitude(F As Flyable)
F.Fly
Debug.Print F.GetAltitude
End Sub
Da die Schnittstelle definiert ist, werden im IntelliSense-Popup-Fenster Fly
und GetAltitude
für F
GetAltitude
.
Wenn wir den folgenden Code ausführen:
Dim MyDuck As New Duck
Dim MyAirplane As New Airplane
FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane
Die Ausgabe ist:
Flying With Wings!
30
Flying With Jet Engines!
10000
Obwohl das Unterprogramm in Airplane
und Duck
als Flyable_Fly
, kann es als Fly
wenn die Variable oder der Parameter als Flyable
definiert Flyable
. Wenn die Variable speziell als Duck
, müsste sie als Flyable_Fly
.
Mehrere Schnittstellen in einer Klasse - flugfähig und schwimmfähig
Flyable
vom Flyable
Beispiel können Sie eine zweite Schnittstelle, Swimmable
, mit folgendem Code hinzufügen:
Sub Swim()
' No code
End Sub
Die Duck
Objekt kann Implement
beide Fliegen und Schwimmen:
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
Ein Fish
- Klasse kann implementieren Swimmable
auch:
Implements Swimmable
Public Sub Swimmable_Swim()
Debug.Print "Swimming under the water"
End Sub
Jetzt können wir sehen , dass die Duck
Objekt kann auf einen Teil als übergeben werden Flyable
einerseits und einer Swimmable
auf der anderen Seite :
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
Die Ausgabe dieses Codes ist:
Fly Check ...
Mit Flügeln fliegen!
30
Mit Jetmotoren fliegen!
10000
Schwimmcheck ...
Auf dem Wasser treiben
Schwimmen unter Wasser