みっつめのDelegate。
デリゲートが委譲する先は、ただ単に指定されたメソッドが呼ばれるだけでなく、呼び出し時にどのインスタンスかも明示される。
[Visual Basic]Imports System
Public NotInheritable Class Program
' えんとりぽいんとぉ〜!
Public Shared Sub Main(ByVal args As String())Dim bufferinMessenger As New Messenger
bufferinMessenger.SetPhrase("{0} の半分はやさしさで出来ています。")Dim caesarMessenger As New Messenger
caesarMessenger.SetPhrase("{0} 、お前もか!")' それぞれのインスタンスのメソッドをデリゲートに入れる。
Dim bufferinMethod As New ShowMessageDelegate(AddressOf bufferinMessenger.ShowMessage)
Dim caesarMethod As New ShowMessageDelegate(AddressOf caesarMessenger.ShowMessage)' 呼びだしメソッドの呼びだし(ややこしいわ!)
Program.ShowMessage(args(0), bufferinMethod)
Program.ShowMessage(args(0), caesarMethod)End Sub
' 引数にあるメソッドで実際に実行するメソッド
Private Shared Sub ShowMessage(ByVal targetName As String, ByVal method As ShowMessageDelegate)method(targetName)
End Sub
' メッセージを表示する Delegate。
Private Delegate Sub ShowMessageDelegate(ByVal targetName As String)
End Class
Public Class Messenger
Private phrase As String = String.Empty
Public Sub SetPhrase(ByVal phrase As String)
Me.phrase = phrase
End Sub
Public Sub ShowMessage(ByVal targetName As String)
Console.WriteLine(phrase, targetName)
End Sub
End Class