Поиск…


Вступление

Интерфейс - это способ определить набор действий, которые будет выполнять класс. Определение интерфейса - это список сигнатур методов (имя, параметры и тип возврата). Говорят, что класс, имеющий все методы, «реализует» этот интерфейс.

В VBA использование интерфейсов позволяет компилятору проверить, что модуль реализует все его методы. Переменная или параметр могут быть определены в терминах интерфейса вместо определенного класса.

Простой интерфейс - доступный

Интерфейс Flyable - это модуль класса со следующим кодом:

Public Sub Fly()
    ' No code.
End Sub

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

Модуль класса, Airplane , использует Implements ключевое слово , чтобы сообщить компилятору сгенерировать ошибку , если она не имеет два метода: Flyable_Fly() к югу и Flyable_GetAltitude() функция , которая возвращает 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

Модуль второго класса, Duck , также реализует 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

Мы можем написать процедуру, которая принимает любое значение Flyable , зная, что она ответит команде Fly или GetAltitude :

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

Поскольку интерфейс определен, всплывающее окно IntelliSense покажет Fly и GetAltitude для F

Когда мы запускаем следующий код:

Dim MyDuck As New Duck
Dim MyAirplane As New Airplane

FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane 

Выход:

Flying With Wings!
30
Flying With Jet Engines!
10000

Обратите внимание, что, хотя подпрограмма называется Flyable_Fly как на Airplane и на Duck , ее можно назвать « Fly когда переменная или параметр определяется как « Flyable . Если переменная определена как Duck , ее нужно будет назвать Flyable_Fly .

Несколько интерфейсов в одном классе - плавающие и плавающие

Используя пример Flyable в качестве отправной точки, мы можем добавить второй интерфейс Swimmable со следующим кодом:

Sub Swim()
    ' No code
End Sub

Объект Duck может 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

Класс Fish может реализовать Swimmable :

Implements Swimmable

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

Теперь мы видим, что объект Duck может быть передан Sub в качестве Flyable с одной стороны, а Swimmable с другой:

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

Результат этого кода:

Fly Check ...

Полет с крыльями!

30

Полет с реактивными двигателями!

10000

Плавать проверить ...

Плавающий на воде

Плавание под водой



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow