方法 : 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. パラメーターとして 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 になります。

参照

処理手順

方法: デリゲート メソッドを呼び出す (Visual Basic)

関連項目

AddressOf 演算子 (Visual Basic)

Delegate ステートメント

その他の技術情報

デリゲート (Visual Basic)