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

更新 : 2007 年 11 月

この例では、プロシージャを他のプロシージャに渡すためにデリゲートを使用する方法について説明します。

デリゲートは、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 または SubtactNumbers のシグネチャが MathOperator のシグネチャと一致するため、このプロシージャでは、AddNumbers または SubtactNumbers への参照を受け入れることができます。

    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 が表示されます。

参照

処理手順

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

参照

AddressOf 演算子

Delegate ステートメント

その他の技術情報

Visual Basic でのデリゲート