方法 : Visual Basic でプロシージャを別のプロシージャに渡す
更新 : 2007 年 11 月
この例では、プロシージャを他のプロシージャに渡すためにデリゲートを使用する方法について説明します。
デリゲートは、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 または 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
パラメータとして 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 が表示されます。