デリゲート (プログラミング)
Javaなどでのインターフェイスを利用したイベント処理と比べ、デリゲートによって参照されるメソッド(実体)の名前を自由に宣言できる、振る舞いをカスタマイズするためにインターフェイスの実装やスーパークラスの継承を行なう必要がない(新たにクラスをわざわざ定義しなくてよい)、などの利点がある。
C#では複数のデリゲートを+, -, +=, -=演算子によって結合・分離させることもできる(マルチキャストデリゲート)。また、デリゲートの追加・削除と呼び出しに制約を加えて安全なコードを記述するための機構としてeventキーワードが用意されている 。eventキーワードで修飾されたデリゲート型メンバーに、外部からイベントのサブスクリプション(購読)を追加・削除する手段としては、+=演算子および-=演算子によるアクセスのみが許可される。また、eventキーワードで修飾されたデリゲート型メンバーを、クラス外部からメソッドとして呼び出すことはできない。なお、+=演算子および-=演算子の処理をカスタマイズするために、eventキーワードで修飾されたデリゲート型メンバーのaddアクセッサーとremoveアクセッサーを明示的に記述することも可能である。
そのほか、スレッドプールを利用して非同期でデリゲートを実行する機能も存在する(非同期デリゲート)。