Recherche…


Introduction

Une interface est un moyen de définir un ensemble de comportements qu'une classe doit exécuter. La définition d'une interface est une liste de signatures de méthode (nom, paramètres et type de retour). On dit qu'une classe ayant toutes les méthodes "implémente" cette interface.

En VBA, l'utilisation d'interfaces permet au compilateur de vérifier qu'un module implémente toutes ses méthodes. Une variable ou un paramètre peut être défini en termes d'interface au lieu d'une classe spécifique.

Interface simple - Flyable

L'interface Flyable est un module de classe avec le code suivant:

Public Sub Fly()
    ' No code.
End Sub

Public Function GetAltitude() As Long
    ' No code.
End Function

Un module de classe, Airplane , utilise le mot-clé Implements pour indiquer au compilateur de générer une erreur à moins qu'il ne dispose de deux méthodes: un sous-objet Flyable_Fly() et une fonction Flyable_GetAltitude() qui renvoie un 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

Un module de deuxième classe, Duck , implémente également 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

Nous pouvons écrire une routine qui accepte toute valeur Flyable , sachant qu'elle répondra à une commande de Fly ou GetAltitude :

Public Sub FlyAndCheckAltitude(F As Flyable)
    F.Fly
    Debug.Print F.GetAltitude
End Sub

Comme l'interface est définie, la fenêtre contextuelle IntelliSense affiche Fly et GetAltitude pour F

Lorsque nous exécutons le code suivant:

Dim MyDuck As New Duck
Dim MyAirplane As New Airplane

FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane 

La sortie est la suivante:

Flying With Wings!
30
Flying With Jet Engines!
10000

Notez que même si la sous-routine est nommée Flyable_Fly à la fois dans Airplane et Duck , elle peut être appelée Fly lorsque la variable ou le paramètre est défini comme Flyable . Si la variable est définie spécifiquement comme un Duck , elle devrait être appelée Flyable_Fly .

Plusieurs interfaces dans une classe - Flyable et Swimable

En utilisant l'exemple Flyable comme point de départ, nous pouvons ajouter une seconde interface, Swimmable , avec le code suivant:

Sub Swim()
    ' No code
End Sub

L'objet Duck peut Implement fois voler et nager:

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

Une classe Fish peut également implémenter Swimmable :

Implements Swimmable

Public Sub Swimmable_Swim()
    Debug.Print "Swimming under the water"
End Sub

Maintenant, nous pouvons voir que l'objet Duck peut être transmis à un Sub en tant que Flyable d'une part, et Swimmable de l'autre:

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

La sortie de ce code est la suivante:

Fly Check ...

Voler avec des ailes!

30

Voler avec des moteurs à réaction!

10000

Swim Check ...

Flottant sur l'eau

Nager sous l'eau



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow