수색…


소개

인터페이스 는 클래스가 수행 할 일련의 동작을 정의하는 방법입니다. 인터페이스의 정의는 메소드 서명 (이름, 매개 변수 및 리턴 유형)의 목록입니다. 모든 메소드를 가진 클래스는 해당 인터페이스를 "구현"한다고합니다.

VBA에서 인터페이스를 사용하면 컴파일러가 모듈이 모든 메서드를 구현하는지 확인할 수 있습니다. 변수 또는 매개 변수는 특정 클래스 대신 인터페이스로 정의 될 수 있습니다.

간단한 인터페이스 - Flyable

Flyable 인터페이스는 다음 코드를 갖는 클래스 모듈입니다.

Public Sub Fly()
    ' No code.
End Sub

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

클래스 모듈 인 AirplaneImplements 키워드를 사용하여 Flyable_Fly() 서브 Flyable_GetAltitude()Long 을 반환하는 Flyable_GetAltitude() 함수의 두 가지 메서드가 없으면 컴파일러에서 오류를 발생 시키도록 Flyable_Fly() 합니다.

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 팝업 창에 F 대한 FlyGetAltitude 가 표시됩니다.

다음 코드를 실행할 때 :

Dim MyDuck As New Duck
Dim MyAirplane As New Airplane

FlyAndCheckAltitude MyDuck
FlyAndCheckAltitude MyAirplane 

출력은 다음과 같습니다.

Flying With Wings!
30
Flying With Jet Engines!
10000

서브 루틴의 이름이 AirplaneDuck 에서 Flyable_Fly 로 지정 Flyable_Fly 변수 또는 매개 변수가 Flyable 로 정의되면 Fly 로 호출 될 수 있습니다. 변수가 Duck 처럼 구체적으로 정의되면 Flyable_Fly 로 호출해야합니다.

하나의 클래스에있는 다중 인터페이스 - Flyable and Swimable

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 객체를 한 손에는 Flyable , 다른 손에는 Swimmable 로 Sub에 전달할 수 있습니다.

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

이 코드의 출력은 다음과 같습니다.

플라이 체크 ...

날개를 가진 비행!

30

제트 엔진과 함께 비행!

10000

수영 검사 ...

물 위에 떠있는

물속에서 수영하기



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow