方法 : Visual Basic でプロシージャを別のプロシージャに渡す
この例では、プロシージャを他のプロシージャに渡すためにデリゲートを使用する方法について説明します。
デリゲートは、Visual Basic の他の型と同様に使用できる型です。 AddressOf 演算子は、プロシージャ名に適用される場合、デリゲート オブジェクトを返します。
この例には、AddressOf 演算子を指定して取得した他のプロシージャへの参照を取得できるデリゲート パラメーターを使ったプロシージャが含まれています。
デリゲートおよびマッチング プロシージャを作成する
MathOperator という名前のデリゲートを作成する
Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
MathOperator と一致するパラメーターと戻り値を持つ AddNumbers という名前のプロシージャを、シグネチャが一致するように作成します。
Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
MathOperator と一致するシグネチャを持つ SubtractNumbers という名前のプロシージャを作成します。
Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
パラメーターとしてデリゲートを取得する 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
パラメーターとして 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)