この例では、デリゲートを使用してプロシージャを別のプロシージャに渡す方法を示します。
デリゲートは、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
という名前のプロシージャを作成します。このプロシージャは、署名が
MathOperator
署名と一致するため、AddNumbers
またはSubtractNumbers
への参照を受け入れることもできます。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
という名前のプロシージャを作成し、AddNumbers
のデリゲートをパラメーターとして、SubtractNumbers
のデリゲートをパラメーターとして使用して、DelegateTest
を 1 回呼び出します。Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Test
が呼び出されると、最初に5
と3
(8) に対して動作AddNumbers
の結果が表示されます。 次に、9
と3
に対して動作するSubtractNumbers
の結果が表示されます。これは 6 です。
こちらも参照ください
.NET