イベントって偉大やん?

.NETの言語、例えば C# には「イベント」という機能がある。
C#のクラスには、メソッドやプロパティをつけることができるが、イベントもその仲間だ。

まず、そのクラスを使用する側でイベントにイベントハンドラをくくりつけておく。
イベントの条件が満たされると、クラス側が勝手にハンドラを呼び出してくれる。

例。
たろう君が風船で遊んでいます。
  たろうclass
    遊び
      風船 = new 赤い風船
たろう君はあきるまで風船を膨らまします。
      while (あきるまで){
        風船.膨らます!
      }
おっと!風船が容量オーバーだ。破裂したぞ!
  風船class
    膨らます
      if (容量オーバー)
        破裂!
でもたろう君はちっちゃい子なので破裂したことがわかりません。
割れた風船を吹き続けています。

たろう君に遊び方を教えてあげましょう。
    風船割れたときの動作
      吹くのをやめる
風船には破裂というイベントがありました。
このイベントに、上の動作をくくりつけてやります。
      風船 = new 赤い風船
      風船.破裂 → 風船割れたときの動作
たろう君はもう一度風船を膨らまします。
おっと風船が破裂した!
      if (容量オーバー)
        破裂!
風船の破裂イベントが動き出します。
      風船.破裂 → 風船割れたときの動作
賢いたろう君は風船吹くのをやめました。

もしイベントという機能がなかったらどうなるでしょう。
最終目的は、風船が破裂したときたろう君が吹くのをやめることです。
つまり、風船から、たろう君に動きを指示してやればよいのです。
      if (容量オーバー)
        たろう.風船割れたときの動作!
さて、お姉さんの花子さんも風船遊びを始めました。
花子さんは遊び方を知っています。
  花子class
    ふーせん割れたとき
      びっくりする
花子さんは風船を膨らまします。あ!破裂した。
      if (容量オーバー)
        たろう.風船割れたときの動作!
花子さん全然びっくりしません。
たろう君が、なぜか吹くのやめてます。
こんな風船はダメダメですね。

風船が破裂イベントを持っていれば、花子さん側で次のようにすればよいのです。
      風船 = new 赤い風船
      風船.破裂 → ふーせん割れたとき

風船は、遊ぶ人のことをぜんぜん知らなくてもかまいません。
容量オーバーのときは破裂イベントを発動する。それで十分です。
「破裂したときのことは、遊ぶ側が考えろ。タイミングだけは教えてやる。」
風船ちょっとエラそうです。
しかし、「使う側」>「使われる側」の依存性を維持したまま、使われる側からの制御が可能になったのは偉いことです。

C#のイベントは、複数の動作をくくりつけることも出来ます。
      風船 = new でっかい風船
      風船.破裂 → たろう.わあっと叫ぶ
      風船.破裂 → 花子.目をつむる
      風船.破裂 → カッパーフィールド.颯爽と登場
すごいぞデヴィッド。何やってんだデヴィッド。

イベントのしかけ自体は昔からあるものだけど、それを言語に組み込んでしまったのは他であまり見ない気がしますた。