えぴちゃん居直ってます。ケツまくってます。
# こ、今回は「好きになれない」ネタじゃないからねっ
VBでイベントを試す:
Public Class Program
' デレゲートを定義し、
Public Delegate Sub DoSomething()
' イベントを用意する
Public Event SomethingHappen As DoSomething
' イベントに着火
Public Sub Execute()
RaiseEvent SomethingHappen()
End Sub
' はとぽっぽハンドラ
Public Sub OnSomething()
Console.WriteLine("くるっくー")
End Sub
Public Shared Sub Main()
Dim obj As New Program
' はとぽっぽハンドラをイベントにアタッチ
AddHandler obj.SomethingHappen,
AddressOf obj.OnSomething ' [※]
Console.WriteLine("ハトがでますよー...")
' 着火!
obj.Execute()
End Sub
End Class
違和感を覚えるのは [※] んとこ。
なんで
obj.SomethingHappen.AddHandler(obj.OnSomething)
みたいな構文にしなかったんだろ。
Eventには AddHandler/RemoveHandler/RaiseEvent メソッドが勝手に
定義されるって約束でいいぢゃん、ねぇ。
そうでなくとも、AddressOf ってキーワードがなーんか邪魔。
AddHandler obj.SomethingHappen, obj.OnSomething
でいいんじゃないの? あるいは
AddHandler obj.SomethingHappen, New DoSomething(obj.OnSomething)
とかさ。
...とか考えてて気が付いた。
VBってば引数のないSub/Functionはカッコなしで呼べるんだ。
だからobj.OnSomethingだけだとその関数を呼び出し、
戻り値をAddHandlerに渡しちゃうかも。
だから AddressOf つけて区別してんじゃないのかなー
それにしても AddressOf とはずいぶん生臭いキーワードだこと。
メモリー管理とかそんなもん気にしなくていいですよーが売りのVBで
「アドレス」なんてあまりにロコツだわ。