2009年3月13日金曜日

イベントの多重登録

以前、デリゲートの等価性は、呼び出し先のメソッドが同じかどうかで判断される事を書いた。

ところが、
Button1.Click+=new EventHandler(foo);
Button1.Click+=new EventHandler(foo);
すると、ボタン一回のクリックに対してfooが二回呼び出される。等価なメソッドの多重登録が許されているという事。ちょっと吃驚した。面白い仕様だ。

でも、デリゲートの等価性の帰結として、この二つのイベントハンドラを削除する時、右辺で生成したデリゲートへのインスタンスへの参照を保持しておく必要はない。
Button1.Click-=new EventHandler(foo);
Button1.Click-=new EventHandler(foo);
でOK。このために、

Button1.Click+=foo;
Button1.Click-=foo;
でfooが(右辺でEventHandlerの別々のインスタンスが暗黙に生成されるにも関わらず)削除されるんだね。

昼夜逆転

やっぱ、昼夜逆転しちゃったなあ。外出した事もあって、あまりに眠いしだるいしで、9時には寝たのだが、夜12時過ぎたくらいに目が覚めて、それから何時間もちっとも寝付けない。でも、起き出して見ると、強烈に眠くて、結局もう一度寝て、朝方に寝付けて正午まで寝ているという、投薬治療を開始するまで何年もずっと付き合ってきたパターン。

結局今日も、昼から起き出してもめちゃくちゃ眠いし、足から腕から運動会の次の日のようなだるさ。軽い筋肉痛というか張りというか・・・

以前は、夜のどうせ眠れないし少しだけ集中し易いしという時間帯を使って、アクティブな活動をほんの少しでもやっていけたのだけど、最後の方では、電気ストーブを火傷しそうなくらい顔に近付けて、ようやく集中力が確保できるという状況で、事実上は1年半前には完全に破綻していた。それから半年良く無理が通ったものだと思う。