カテゴリ: C# 更新日: 2025/12/21

C#のデリゲートチェーン(複数デリゲートの連結)をやさしく完全解説

C#のデリゲートチェーン(複数デリゲートの連結)を解説
C#のデリゲートチェーン(複数デリゲートの連結)を解説

先生と生徒の会話形式で理解しよう

生徒

「C#のデリゲートって、1つの処理しか登録できないんですか?」

先生

「実は、デリゲートには複数の処理をまとめて登録することができます。」

生徒

「まとめて? それってどういう意味ですか?」

先生

「それを『デリゲートチェーン』と呼びます。順番に処理を実行できて、とても便利ですよ。」

1. デリゲートチェーンとは?

1. デリゲートチェーンとは?
1. デリゲートチェーンとは?

C#のデリゲートチェーンとは、1つのデリゲートに対して複数のメソッド(処理)を連結して登録する仕組みのことです。 デリゲートは「メソッドを入れておく箱」のような存在ですが、その箱には実は1つだけでなく、複数のメソッドを入れることができます

プログラミング未経験の方は、「1回ボタンを押したら、いくつかの作業が順番に行われる」とイメージすると分かりやすいです。 例えば、スイッチを押すと、電気がついて、音楽が流れて、画面が表示されるような仕組みと似ています。

2. デリゲートのおさらい

2. デリゲートのおさらい
2. デリゲートのおさらい

まず、デリゲートの基本を簡単に確認します。 デリゲートとは、メソッドを変数のように扱うための仕組みです。 難しく聞こえますが、「あとで実行する処理を、あらかじめ登録しておくもの」と考えてください。


delegate void MyDelegate();

このコードは、「引数なし・戻り値なしのメソッドを登録できるデリゲート」を定義しています。 delegateというキーワードが出てきましたが、これは「代理」「代わりに実行する」という意味があります。

3. デリゲートにメソッドを1つ登録する

3. デリゲートにメソッドを1つ登録する
3. デリゲートにメソッドを1つ登録する

まずは、1つのメソッドをデリゲートに登録する基本的な例を見てみましょう。


static void Hello()
{
    Console.WriteLine("こんにちは");
}

MyDelegate d = Hello;
d();

こんにちは

この例では、Helloというメソッドをデリゲートに登録しています。 そして d() と書くことで、中身に登録されている処理が実行されます。

4. デリゲートチェーンで複数の処理を連結する

4. デリゲートチェーンで複数の処理を連結する
4. デリゲートチェーンで複数の処理を連結する

ここからが本題です。 デリゲートは、「+」や「+=」を使って、複数のメソッドをつなげることができます。 これがデリゲートチェーンです。


static void Hello()
{
    Console.WriteLine("こんにちは");
}

static void Goodbye()
{
    Console.WriteLine("さようなら");
}

MyDelegate d = Hello;
d += Goodbye;
d();

こんにちは
さようなら

実行結果を見ると、登録した順番通りに処理が実行されていることが分かります。 このように、1回の呼び出しで複数の処理をまとめて実行できるのが、デリゲートチェーンの大きな特徴です。

5. 「+=」と「-=」の意味

5. 「+=」と「-=」の意味
5. 「+=」と「-=」の意味

デリゲートチェーンでは、+=-= という記号を使います。 これは算数の足し算・引き算ではなく、「登録する」「取り除く」という意味で使われます。


d -= Hello;
d();

さようなら

この例では、Helloの処理だけがチェーンから外れています。 つまり、デリゲートチェーンは後から自由に追加・削除ができる柔軟な仕組みなのです。

6. デリゲートチェーンが使われる場面

6. デリゲートチェーンが使われる場面
6. デリゲートチェーンが使われる場面

デリゲートチェーンは、特にイベント処理でよく使われます。 イベントとは、「ボタンが押された」「データが変更された」などの出来事のことです。

1つの出来事に対して、画面更新・ログ記録・通知表示など、複数の処理を行いたい場合があります。 そんなときに、デリゲートチェーンを使うと、処理をきれいにまとめることができます。

7. 初心者がつまずきやすいポイント

7. 初心者がつまずきやすいポイント
7. 初心者がつまずきやすいポイント

初心者の方が混乱しやすいのは、「なぜ全部実行されるのか?」という点です。 デリゲートチェーンでは、最後の1つだけでなく、登録されているすべてのメソッドが実行されます

また、戻り値があるデリゲートの場合は、最後に登録されたメソッドの戻り値だけが使われるという特徴もあります。 今回は基本理解を目的としているため、戻り値なしの例で説明しています。

8. ラムダ式とデリゲートチェーン

8. ラムダ式とデリゲートチェーン
8. ラムダ式とデリゲートチェーン

デリゲートチェーンには、ラムダ式も登録できます。 ラムダ式とは、「その場で簡単に処理を書く方法」です。


MyDelegate d = () => Console.WriteLine("処理A");
d += () => Console.WriteLine("処理B");
d();

処理A
処理B

このように書くと、短い処理をわざわざメソッドとして作らなくても済みます。 デリゲートチェーンとラムダ式は、非常に相性の良い組み合わせです。

カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.4
Java&Spring記事人気No4
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
COBOL
COBOLの帳票レイアウトを美しく!可読性向上テクニックを徹底解説