先日の記事で C#のdelegateについてちらっと触れた。

C#のDelegateというのは、簡単に説明すると、C/C++での関数ポインタで、
イベントハンドラなどに利用される。

ただ、C/C++の関数ポインターとは大きく異なる点(拡張された点)が少なくとも2つあり、
まともに使いこなすならこの2点を抑えないといけない。

1つめは、インスタンスメソッドを参照できる点。
C++ではstaticなメソッドしか参照できなかったので、
第1引数にthisを渡すなどして回避していた物が割と柔軟に対応できます。

2つめは、複数のメソッドを割り当てることが出来る点。
C/C++はあくまでもプログラムの場所を指し示す物、
もっと低レベルで言うならば、指定された関数のメモリー上のアドレスを指定していたわけですが、
そのため、複数の関数を関数ポインターに渡すことは出来ませんでした。
Delegateは、複数のメソッドを指定できる画期的な機能があります。

この2点が、関数ポインターとの大きな違い。

慣れてくるとかなり便利。