C#のdelegateとC++の関数ポインタとの相違点

C#のdelegateはユーザ定義のメソッドを登録して呼び出しできたりと非常に便利な機能です。

これは、C++でいう関数ポインタによく似ています。
ただし、これよりも便利なことができる機能が加えられたものがdelegateだと思って差し支えないでしょう。

関数ポインタとの主な違いは以下の通りです。

・マルチキャストができる
・メソッドを指定できる
・メソッドのアタッチ・デタッチが自由

マルチキャストとは、複数のメソッドを一つのdelegateに登録できる機能です。
delegateへのメソッド追加は、「+=」演算子で行います。

次のメソッド追加は、任意クラスの任意のメソッド追加が自由に登録できるということです。
関数ポインタでは、クラスまで厳密に一致しなければなりませんでした。

最後は、メソッドを自由に追加・削除できる機能です。
追加は「+=」、削除は「-=」演算子で行います。

このように、C#のdelegateはC++の関数ポインタの拡張として使うことができます。
実は、delegateは関数ポインタとしてC++に渡して呼び出す事も可能です。