Sök…
Introduktion
Ett gränssnitt är ett sätt att definiera en uppsättning beteenden som en klass kommer att utföra. Definitionen av ett gränssnitt är en lista med metodsignaturer (namn, parametrar och returtyp). En klass som har alla metoder sägs "implementera" det gränssnittet.
I VBA låter kompilatoren använda gränssnitt kontrollera att en modul implementerar alla dess metoder. En variabel eller parameter kan definieras i termer av ett gränssnitt istället för en specifik klass.
Enkelt gränssnitt - Flytbart
Gränssnittet Flyable
är en Flyable
med följande kod:
Public Sub Fly()
' No code.
End Sub
Public Function GetAltitude() As Long
' No code.
End Function
En klassmodul, Airplane
, använder nyckelordet Implements
att säga kompilatorn att höja ett fel om det inte har två metoder: en Flyable_Fly()
Flyable_GetAltitude()
och en Flyable_GetAltitude()
-funktion som returnerar en Long
.
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
En andra klassens modul, Duck
, implementerar också 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
Vi kan skriva en rutin som accepterar alla Flyable
värden, och veta att det kommer att svara på ett kommando från Fly
eller GetAltitude
:
Public Sub FlyAndCheckAltitude(F As Flyable)
F.Fly
Debug.Print F.GetAltitude
End Sub
Eftersom gränssnittet är definierat visar popup-fönstret IntelliSense Fly
och GetAltitude
för F
När vi kör följande kod:
Dim MyDuck As New Duck
Dim MyAirplane As New Airplane
FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane
Utgången är:
Flying With Wings!
30
Flying With Jet Engines!
10000
Observera att även om subrutinen heter Flyable_Fly
i både Airplane
och Duck
, kan den kallas som Fly
när variabeln eller parametern definieras som Flyable
. Om variabeln definieras specifikt som en Duck
måste den kallas Flyable_Fly
.
Flera gränssnitt i en klass - Flytbar och simbar
Med hjälp av Flyable
exemplet som utgångspunkt kan vi lägga till ett andra gränssnitt, Swimmable
, med följande kod:
Sub Swim()
' No code
End Sub
Duck
objektet kan Implement
både flygning och simning:
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
En Fish
klass kan implementera Swimmable
också:
Implements Swimmable
Public Sub Swimmable_Swim()
Debug.Print "Swimming under the water"
End Sub
Nu kan vi se att Duck
objektet kan skickas till en Sub som en Flyable
å ena sidan och en Swimmable
å andra sidan:
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
Utgången från denna kod är:
Flygkontroll ...
Flyga med vingar!
30
Flyga med jetmotorer!
10 tusen
Simma check ...
Flyter på vattnet
Simning under vattnet