デリゲートこのアーカイブは同期化されません。日記が更新されても、このアーカイブには反映されません。今日は昨日のステップをもう少し進めてみる。果たすべき役割が複数の関数に分解された。メソッドの一部を引用する。基本的には何も変わっていない。コードを単純にルーチンに分割するだけなら、これ以上は分解できないほどシンプルになった。ここで、少し視点を変えてみよう。「見た目」がすっきりしたので見えてくることがある。全て「単一のメソッド呼び出し」となっている。共通の処理をしているということだ。外に出せないだろうか。「メソッド呼び出しを集約する」ことを考える。「後で呼び出す予定」としてメソッドを記憶しておく。後で、呼び出しを行うのだ。デリゲートと呼ばれる特殊な変数があり、この変数には、メソッドへの参照を格納することができる。メソッドを呼んで戻り値を格納するのではない。通常変数に型があるのと同じように、デリゲート変数にも型がある。言い換えれば「メソッドに型がある」ということだ。メソッドの型とは、メソッドのシグネチャのことである。シグネチャとは、戻り値と引数の型の組み合わせの事だ。コードを書いて説明しよう。デリゲートを宣言する。同じ空間で宣言することができる。path);書き方はメソッドの定義に似ている。いうキーワードが入ることだ。通常のメソッドだと、メソッド名のように見える部分が、デリゲート宣言の場合、デリゲート型の名前となる。いう名前の型を定義した。末尾につけるのが習慣のようだ。変数のように扱うことができる。null;そして、このデリゲート型のインスタンスを作成する。「メソッドへの参照」を引数として受け取る。ポイントは、「GetShortcutTarget」だ。括弧が付いてないのでこれはメソッド呼び出しではなく、メソッド自身への参照を指す。メソッドへの参照を渡す。デリゲート経由でメソッドを呼び出すのは簡単である。hander("引数");デリゲート変数に括弧をつけて呼び出せば、デリゲート変数が参照するメソッドが呼び出される。文を書き換えてみよう。内で呼び出してるメソッドの型は共通化しなければならない。型に余分な引数を追加し、メソッドの型をあわせることにしよう。path)そして、デリゲートを宣言する。フィールドと同じ階層で宣言しよう。アクセス修飾子をつけること。hander(pscd.wszFile);どうだろうか。言って、手間が増えただけだと感じるかもしれない。呼び出しを一箇所に集約することができた。文の中ではロジック自体は実行されない。これは次のステップに進むにあたって重要な意味をもつのだ。関数への参照を直接格納する値型ではない。単純なクラスではないのだ。複数のメソッドを連鎖的に呼び出したりする機能も持つ。系のプログラミングで多用されている。