update.初学者にとってデリゲートの理解は大変だということで記事にしました。}このコードでは何が起こっているのでしょう。//2行目1行目で起きている事プログラムが実行されると、生成されたデータはメモリ上に展開されます。メモリは以下の図のような格子状の物をイメージしてくださいさて、1行目のコードが実行されると、コンピュータはメモリから1マスを選び、そこを「fugaという変数の場所」として扱いますちょうど、こんな感じですそして、2行目ですが、これは以下の2つに分かれています1.sampleクラスを作る2.fugaにsampleクラスの場所を格納するコレを順に追っていきましょうsampleクラスを作るとき、それはメモリ上に作られます。今回、sampleクラスは5マス使うものとしましょうすると、以下のようになりますb7番地にsampleクラスが作られて配置されました。「2.fugaにsampleクラスの場所を格納する」が行われると以下のようになりますつづいて、sampleクラスの入っているb7からの5マスをよく見てみます。}メモリ上の中身を眺めると、こんな風("風"です)になっているんですこの図を見ればわかるように、「メソッドも変数と同様にメモリ上に配置される」ということになるのです。//2行目この処理で記述されている「fuga」という変数は、単に、「メモリ上に実際に存在するsampleクラスのインスタンスの場所を持っているだけ」ということが理解していただけたかと思います。変数は「メモリ上に存在する実際のクラスの場所を保存することが出来る」ということになります。「変数はクラスと同様に、メソッドの場所も保存することが出来る」のです。(超重要)メソッドの変数さて、メソッドの場所を変数に保存できるということをお伝えしたわけですが、実はこれには名前がついています。代入できないように、変数には「型が違うものは代入できない(=それの場所を保持できない)」というルールがありました。//これはできない実は、メソッドにも「型」が存在します。メソッドの方は「引数と戻り値」で決定されるのです。}なぜできないのか、それは「sampleDelegateというデリゲートは「int型を受け取り何も返さないメソッドの場所のみ格納できる」からです。sampleDelegateであるbooに「何も受け取らず何も返さないメソッドの場所を格納する」ことは出来ませんどうしてそんな制約があるの?「メソッドを入れることが出来る変数なのに、どうしてそんな制約を入れるのか?」という風に思った方もいるかと思います。実は、この制約によって、あるメリットが発生します。.netの「イベント」というものと合わせて説明します。そもそもイベントって?イベントとは「マウスをクリックした」とか「ボタンを押した」とか「テキストボックスに入力した」とかユーザーの動作に対して名付けられたものです。.netではイベントとメソッドを紐づけることができ、紐づけられたメソッドはそのイベントが発生したときに呼び出されることになります。このとき、メソッドを実行するために必要な引数は、イベント側からメソッドに渡すことになります。対してobject型とEventArgs型のデータを渡すことになりますイベントに登録されたメソッドの型が違う時もし、ここでボタンクリックイベントに登録されているメソッドの型が違った場合を考えましょうこんな風に、イベント側に登録されたメソッドの引数の型が違うという事態になったとき、イベント側ではどうやっても対処できません。同じ引数である場合は前項で示したように、呼び出すことが出来るようになります(なぜなら、呼び出すメソッド全てが同じ引数を要求する場合、一つ作って、それを全部のメソッドにコピーして渡せばいいだけなので)いつ判断するかさて、メソッドがどのような引数を受け取るかということは、「メソッドの型は何か」ということになりますので(正確には戻り値の型も含みます)、「イベントに登録されているメソッドの引数の型が違う」ということは、「イベントに登録されているメソッドの型が違う」ということと同じになりますこのような事態が発生することを.netではいつ防いでいるのかということが問題となります。考えられる可能性としては・実際にイベントが発生して、データを渡す段階で問題発生!エラーで落ちる!(実行時エラー)・コードを書いてる段階で、異なる型のメソッドが登録されている場合にエラーとなる(コンパイルエラー)が挙げられます.netでは、このうちの後者(コンパイルエラーとなる)を採用しているのです。やって判断するかでは、どのような方法で「イベントに登録されるメソッドの型を1つに絞り込んでいるのか」ということになります。その方法にデリゲートを使っているのです。具体的には、以下の図のような形ですこのように、デリゲートを用いることで「イベントに登録できるメソッドに制約を与え」そのおかげでイベント側では呼び出されるメソッドに対して機械的に(まさに言葉通り!)同じデータを渡すだけで問題なく処理が進むことが保証されるわけです。int型を受け取り何も返さないメソッド」のみを代入できるデリゲートを作ります2.hogeEventというイベントを作ります。このhogeEventに登録できるメソッドはOriginEventHandlerに代入できるメソッドだけですという意味だったわけです。upLoginユーザーは見つかりませんでした。