VBオブジェクト指向プログラミング講座 第12回 デリゲートをマスターしよう
まずは、デリゲートの使い方を示すサンプルを見てみましょう。
Module DelegateSample
'手続き用デリゲートを宣言
Delegate Sub Action(value As Object)
'関数用デリゲートを宣言
Delegate Function Func(left As Integer, right As Integer) As Integer
Sub Main()
'コンソールに出力する手続きを宣言
Dim OutPut As Action =
Sub(value As Object) Console.WriteLine(value)
'足し算を宣言
Dim Add As Func =
Function(value1 As Integer, value2 As Integer) value1 + value2
'1+1は?
Dim x As Integer = 1
Dim y As Integer = 1
Dim message As String = x & " + " & y & " = "
Dim result As Integer = Add(x, y) '関数を使用
OutPut(message & result) '手続きを使用
Console.WriteLine("処理を終了しました。Enterキーを押してください。")
Console.ReadLine()
End Sub
End Module
手続きと関数を呼び出している部分に注目してください。デリゲートでない普通の手続きと関数に見えます。この不思議なオブジェクト「デリゲート」は、プログラムではたった一言です。ですが、コンパイラはDelegateキーワードを見つけると、複雑なオブジェクトを作成しています。それがデリゲートの正体です。
コンパイラが生成するデリゲートオブジェクトは、手続きと関数を示す特別な整数値(System.IntPtr)を保持します。この数値を使って、手続きと関数を適切に呼び出しています。他にも色々ありますが、あまり詳細を解説するとややこしくなると思いますので今回は止めます。サンプルプログラムを元に、デリゲートオブジェクトを使って、実験をしてみましょう。そうすれば、デリゲートオブジェクトの事がわかると思います。