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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow