方法: 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.

この例では、プロシージャを別のプロシージャを使用して取得への参照を受け取ることができます delegate パラメーターを持つ、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のデリゲートが 1 回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に機能している538 であります。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