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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow