方法: 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
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 が表示されます。 次に、9
と3
で動作しているSubtractNumbers
の結果である 6 が表示されます。
関連項目
.NET