방법: 프로시저에 Visual Basic에서 다른 프로시저 전달How to: Pass Procedures to Another Procedure in Visual Basic

이 예제에서는 대리자를 사용 하 여 프로시저에 다른 프로시저 전달 하는 방법을 보여 줍니다.This example shows how to use delegates to pass a procedure to another procedure.

대리자 형식이 Visual Basic에서 다른 형식 처럼 사용할 수 있습니다.A delegate is a type that you can use like any other type in Visual Basic. AddressOf 연산자 프로시저 이름에 적용 될 때 대리자 개체를 반환 합니다.The AddressOf operator returns a delegate object when applied to a procedure name.

이 예제에 사용 하 여 얻은 다른 프로시저에 대 한 참조를 사용할 수 있는 대리자 매개 변수를 사용 하 여 프로시저를 AddressOf 연산자입니다.This example has a procedure with a delegate parameter that can take a reference to another procedure, obtained with the AddressOf operator.

대리자 및 일치 하는 프로시저 만들기Create the delegate and matching procedures

  1. 명명 된 대리자를 만드는 MathOperator합니다.Create a delegate named MathOperator.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. 라는 프로시저를 만듭니다 AddNumbers 매개 변수 및 반환 값의 일치 하는 MathOperator서명이 일치 되도록 합니다.Create a procedure named AddNumbers with parameters and return value that match those of MathOperator, so that the signatures match.

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. 라는 프로시저를 만듭니다 SubtractNumbers 일치 하는 서명을 사용 하 여 MathOperator입니다.Create a procedure named SubtractNumbers with a signature that matches MathOperator.

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. 라는 프로시저를 만들어 DelegateTest 대리자를 매개 변수로 사용 합니다.Create a procedure named DelegateTest that takes a delegate as a parameter.

    이 절차에 대 한 참조를 사용할 수 있습니다 AddNumbers 또는 SubtractNumbers이므로 해당 서명이 일치는 MathOperator 서명 합니다.This procedure can accept a reference to AddNumbers or SubtractNumbers, because their signatures match the MathOperator signature.

    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
    
  5. 라는 프로시저를 만듭니다 Test 를 호출 하는 DelegateTest 에 대 한 대리자를 사용 하 여 한 번 AddNumbers 매개 변수로 사용 하 여 대리자를 다시 SubtractNumbers 매개 변수로 합니다.Create a procedure named Test that calls DelegateTest once with the delegate for AddNumbers as a parameter, and again with the delegate for SubtractNumbers as a parameter.

    Protected Sub Test()
        DelegateTest(5, AddressOf AddNumbers, 3)
        DelegateTest(9, AddressOf SubtractNumbers, 3)
    End Sub
    

    Test 는 호출 처음 표시 하면 AddNumbers 에서 작동 하 53, 8 인 합니다.When Test is called, it first displays the result of AddNumbers acting on 5 and 3, which is 8. 결과 SubtractNumbers 역할을 하 93 표시 되 면 6이 있습니다.Then the result of SubtractNumbers acting on 9 and 3 is displayed, which is 6.

참고자료See also