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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow