>>183
>イベントハンドラを作る我々開発者はクリックイベントが起きた場合に
>このメソッドを呼び出してほしいとイベントハンドラを代入して呼び出してもらう
これは、「開発者のコード」が、ボタンクリック時の処理を、我=「開発者のコード」に属するイベントハンドラに委譲せよ、と「ボタン」迫るケース。
しかし「ボタン」を実装したコード自体はマイクロソフト謹製でかつビルド済みだから、開発者側はそれを改変できない。
だから「「ボタン」が「開発者のコードを直接呼び出せばいいのに!」という系の願いは叶えられようがない。
こういうとき、イベントハンドラのコードをデータのごとく「ボタン」に渡せて初めて解決する。デリゲートはその入れ物。

なお、「ボタン」を作るのがマイクロソフトでなくて今日の漏れで、「開発者のコード」を書くのが3000年後の漏れだとしても約同じ事
これが>153の説明。「ボタン」は「開発者のコード」専用には設計できない。

>>184
>呼び出し側も呼び出される側も自分で設計する場合は
>やっぱり普通に直接メソッド呼び出すよね
例えばだが、switch文x=1,2,3,...,10000に応じて自作関数1万個のどれかに分岐する1万行のコードのかわりにデリゲート1万個の配列をつくっておけば
呼び出しは1行で済むし、
一方、デリゲートに収容するコードはデータとして生成もできる(>160)から、初期化には1万行要らない(かもしれない)