방법: Visual Basic에서 프로시저에 다른 프로시저 전달
이 예제에서는 대리자를 사용하여 한 프로시저를 다른 프로시저에 전달하는 방법을 보여 줍니다.
대리자는 Visual Basic의 다른 형식처럼 사용할 수 있는 형식입니다. AddressOf 연산자를 프로시저 이름에 적용하면 대리자 개체가 반환됩니다.
이 예제의 프로시저에는 AddressOf 연산자를 통해 얻은 다른 프로시저에 대한 참조를 사용할 수 있는 대리자 매개 변수가 있습니다.
대리자 및 일치하는 프로시저 만들기
MathOperator라는 대리자를 만듭니다.
Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
시그니처가 일치하도록 매개 변수 및 반환 값이 MathOperator와 일치하는 AddNumbers라는 프로시저를 만듭니다.
Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
MathOperator와 시그니처가 일치하는 SubtractNumbers라는 프로시저를 만듭니다.
Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
대리자를 매개 변수로 사용하는 DelegateTest라는 프로시저를 만듭니다.
이 프로시저에서는 AddNumbers 또는 SubtractNumbers에 대한 참조를 사용할 수 있습니다. 이는 두 프로시저의 시그니처가 MathOperator 시그니처와 일치하기 때문입니다.
Sub DelegateTest( ByVal x As Double, ByVal op As MathOperator, ByVal y As Double ) Dim ret As Double ret = op.Invoke(x, y) ' Call the method. MsgBox(ret) End Sub
한 번은 AddNumbers에 대한 대리자를 매개 변수로 사용하고 또 한 번은 SubtractNumbers에 대한 대리자를 매개 변수로 사용하여 DelegateTest를 호출하는 Test라는 프로시저를 만듭니다.
Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Test를 호출하면 먼저 5와 3에 대해 AddNumbers를 실행한 결과인 8이 표시되고, 그런 다음 9와 3에 대해 SubtractNumbers를 실행한 결과인 6이 표시됩니다.