Zoeken…
Invoering
Een interface is een manier om een reeks gedragingen te definiëren die een klas zal uitvoeren. De definitie van een interface is een lijst met methodehandtekeningen (naam, parameters en retourtype). Er wordt gezegd dat een klasse met alle methoden die interface "implementeert".
In VBA kan de compiler met behulp van interfaces controleren of een module alle methoden implementeert. Een variabele of parameter kan worden gedefinieerd als een interface in plaats van een specifieke klasse.
Eenvoudige interface - Flyable
De interface Flyable
is een Flyable
met de volgende code:
Public Sub Fly()
' No code.
End Sub
Public Function GetAltitude() As Long
' No code.
End Function
Een klassemodule, Airplane
, gebruikt het sleutelwoord Implements
om de compiler te vertellen een fout te genereren, tenzij deze twee methoden heeft: een sub Flyable_Fly()
en een functie Flyable_GetAltitude()
die een Long
retourneert.
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
Een tweede klas module, Duck
, implementeert ook 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
We kunnen een routine schrijven die elke Flyable
waarde accepteert, wetende dat deze reageert op een opdracht van Fly
of GetAltitude
:
Public Sub FlyAndCheckAltitude(F As Flyable)
F.Fly
Debug.Print F.GetAltitude
End Sub
Omdat de interface is gedefinieerd, toont het pop-upvenster van IntelliSense Fly
en GetAltitude
voor F
Wanneer we de volgende code uitvoeren:
Dim MyDuck As New Duck
Dim MyAirplane As New Airplane
FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane
De output is:
Flying With Wings!
30
Flying With Jet Engines!
10000
Merk op dat, hoewel de subroutine Flyable_Fly
wordt genoemd in zowel Airplane
als Duck
, deze kan worden opgeroepen als Fly
wanneer de variabele of parameter is gedefinieerd als Flyable
. Als de variabele specifiek als een Duck
wordt gedefinieerd, moet deze worden genoemd als Flyable_Fly
.
Meerdere interfaces in één klasse - vliegbaar en zwembaar
Met het Flyable
voorbeeld als uitgangspunt kunnen we een tweede interface, Swimmable
, toevoegen met de volgende code:
Sub Swim()
' No code
End Sub
Het Duck
object kan zowel vliegen als zwemmen 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
Een Fish
klasse kan ook Swimmable
implementeren:
Implements Swimmable
Public Sub Swimmable_Swim()
Debug.Print "Swimming under the water"
End Sub
Nu kunnen we zien dat het Duck
object aan een Sub kan worden doorgegeven als een Flyable
enerzijds en een Swimmable
anderzijds:
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
De output van deze code is:
Vliegcontrole ...
Vliegen met vleugels!
30
Vliegen met straalmotoren!
10000
Zwemcontrole ...
Drijvend op het water
Zwemmen onder water