方法: 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 という名前のプロシージャを作成します。

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

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

    Test が呼び出されると、最初は 5 および 3 で動作している AddNumbers の結果である 8 が表示されます。 次に、93 で動作している SubtractNumbers の結果である 6 が表示されます。

関連項目