連載! とことん VB: 第 20 回 デリゲート (Delegate) の基本とジェネリック デリゲート
ToCoStick(トコスティック)Windowsアプリはデリゲート (Delegate)を使用しており、デリゲート (Delegate)についての学習が必要です。詳細の説明は下記アドレスで確認できます。
http://code.msdn.microsoft.com/windowsapps/20-Delegate-ff228d6e
5.1 デリゲート (Delegate)を使用しない場合のコード
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim snd As New Sender() '←[1]
snd.Target = Me '←[2]
snd.TestAction() '←[3]
End Sub
Public Function Notified(ByVal msg As String) As Boolean '←[4]
MessageBox.Show(msg)
Return True
End Function
End Class
Public Class Sender '←[5]
Public Target As Form1 '←[6]
Public Sub TestAction() '←[7]
Dim result As Boolean
result = Target.Notified("Notified by Method Name") '←[8]
MessageBox.Show(result)
End Sub
End Class
5.2 デリゲート (Delegate)を使用しない場合の動作
(1)Button1_Clickが実行
(2)変数sndがSender型で生成
(3)snd.TargetにMeを代入
(4)snd.TestAction()が実行
(5)変数resultをBoolean型で生成
(6)Public Function Notified(ByVal msg As String) As Booleanを実行
(7)MessageBoxに"Notified by Method Name"を表示
(8)結果をresultに代入
(9)MessageBoxに"True"を表示
5.3 コードの単純化単純化
コードを単純化すると
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim snd As New Sender() '←[1]
snd.TestAction() '←[3]
End Sub
Public Function Notified(ByVal msg As String) As Boolean '←[4]
MessageBox.Show(msg)
Return True
End Function
End Class
Public Class Sender '←[5]
Public Sub TestAction() '←[7]
Dim result As Boolean
result = Form1.Notified("Notified by Method Name") '←[8]
MessageBox.Show(result)
End Sub
End Class
さらに単純化すると
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim result As Boolean
result = Notified("Notified by Method Name") '←[8]
MessageBox.Show(result)
End Sub
Public Function Notified(ByVal msg As String) As Boolean '←[4]
MessageBox.Show(msg)
Return True
End Function
End Class
*ここまで単純化するとプログラムの流れの理解が容易となります。
5.4 デリゲート (Delegate)を使用した場合のコード
Public Delegate Function Func1(ByVal msg As String) As Boolean '←[1]
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim snd As New Sender()
snd.Notify = New Func1(AddressOf Me.Notified) ' ←[2]
snd.TestAction()
End Sub
Public Function Notified(ByVal msg As String) As Boolean
MessageBox.Show(msg)
Return True
End Function
End Class
Public Class Sender '←[3]
Public Notify As Func1 '←[4]
Public Sub TestAction()
Dim result As Boolean
result = Notify("Notify by Delegate") '←[5] デリゲートによる呼び出し
MessageBox.Show(result)
End Sub
End Class
5.3 デリゲート (Delegate)を使用した場合の動作
(1)Button1_Clickが実行
(2)変数sndがSender型で生成
(3)変数snd.Notifyを Func1(AddressOf Me.Notified)型で生成
(4)snd.TestAction()を実行
(5)変数resultをBoolean型で生成
(6)MessageBoxに"Notified by Method Name"を表示
(7)結果をresultに代入
(8)MessageBoxに"True"を表示
*ToCoStick(トコスティック)Windowsアプリで多用しています。
*難解ですがToCoStick(トコスティック)Windowsアプリを理解するには必須です。