次の方法で共有


方法: Visual Basic でプロシージャを別のプロシージャに渡す

この例では、デリゲートを使用してプロシージャを別のプロシージャに渡す方法を示します。

デリゲートは、Visual Basic の他の型と同様に使用できる型です。 AddressOf演算子は、プロシージャ名に適用されるとデリゲート オブジェクトを返します。

この例には、 AddressOf 演算子で取得した別のプロシージャへの参照を受け取ることができるデリゲート パラメーターを持つプロシージャがあります。

デリゲートを作成し、それに対応するプロシージャを設定する

  1. MathOperatorという名前のデリゲートを作成します。

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. シグネチャが一致するように、パラメーターと戻り値がMathOperatorのものと一致する AddNumbers という名前のプロシージャを作成します。

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. MathOperatorに一致するシグネチャを持つ SubtractNumbers という名前のプロシージャを作成します。

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. デリゲートをパラメーターとして受け取る DelegateTest という名前のプロシージャを作成します。

    このプロシージャは、署名がMathOperator署名と一致するため、AddNumbersまたはSubtractNumbersへの参照を受け入れることもできます。

    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という名前のプロシージャを作成し、AddNumbersのデリゲートをパラメーターとして、SubtractNumbersのデリゲートをパラメーターとして使用して、DelegateTestを 1 回呼び出します。

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

    Testが呼び出されると、最初に53 (8) に対して動作AddNumbersの結果が表示されます。 次に、93に対して動作するSubtractNumbersの結果が表示されます。これは 6 です。

こちらも参照ください