Поиск…
Вступление
Интерфейс - это способ определить набор действий, которые будет выполнять класс. Определение интерфейса - это список сигнатур методов (имя, параметры и тип возврата). Говорят, что класс, имеющий все методы, «реализует» этот интерфейс.
В 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
Плавать проверить ...
Плавающий на воде
Плавание под водой