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

C#のイベントハンドラにデリゲートを使う方法をやさしく解説!初心者向け完全ガイド

C#のイベントハンドラにデリゲートを使う方法
C#のイベントハンドラにデリゲートを使う方法

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

生徒

「C#でボタンを押したときに処理が動く仕組みって、どうなっているんですか?」

先生

「それはイベントとイベントハンドラ、そしてデリゲートを使って実現されています。」

生徒

「イベントハンドラとかデリゲートって、名前が難しそうで不安です…」

先生

「大丈夫です。身近なたとえを使いながら、順番に説明していきましょう。」

1. イベントハンドラとは何か?

1. イベントハンドラとは何か?
1. イベントハンドラとは何か?

C#のイベントハンドラとは、「ある出来事が起きたときに実行される処理」のことです。 例えば、ボタンをクリックしたとき、マウスを動かしたとき、キーを押したときなどが「イベント」にあたります。 そして、そのイベントが起きた瞬間に呼び出される処理がイベントハンドラです。

身近な例で考えると、インターホンを想像してください。 「ピンポン」と音が鳴るのがイベントで、「玄関に出る」という行動がイベントハンドラです。 C#では、この「呼び出される処理」をデリゲートという仕組みで管理しています。

2. デリゲートとは?イベントとの関係

2. デリゲートとは?イベントとの関係
2. デリゲートとは?イベントとの関係

デリゲートは、「あとで呼び出せるメソッドの入れ物」です。 電話番号を書いたメモのようなもので、「この番号に電話すれば、この人につながる」と決まっています。 C#のデリゲートも同じで、「このデリゲートを呼び出すと、このメソッドが実行される」と決まっています。

イベントでは、「イベントが起きたら、登録されているデリゲートを通して処理を呼び出す」という流れになります。 そのため、C#のイベントハンドラは必ずデリゲートを使って動いていると考えて大丈夫です。

3. イベントハンドラの基本的な形

3. イベントハンドラの基本的な形
3. イベントハンドラの基本的な形

C#でよく使われるイベントハンドラは、次のような形をしています。 少し難しく見えますが、今は「決まった形があるんだな」くらいで問題ありません。


void Button_Click(object sender, EventArgs e)
{
    Console.WriteLine("ボタンがクリックされました");
}

この中で重要なのは次の点です。 senderは「どのボタンが押されたか」を表し、 EventArgsは「イベントに関する追加情報」を表します。 これらはイベントハンドラ用に用意された決まりごとなので、最初は深く考えなくて大丈夫です。

4. デリゲートを使ってイベントに処理を登録する

4. デリゲートを使ってイベントに処理を登録する
4. デリゲートを使ってイベントに処理を登録する

イベントハンドラは、イベントに「この処理を実行してください」と登録して初めて動きます。 この登録の仕組みに、デリゲートが使われています。


button.Click += Button_Click;

この1行は、「ボタンがクリックされたら、Button_Clickメソッドを実行する」という意味です。 「+=」は、「処理を追加する」という意味で、複数のイベントハンドラを登録することもできます。

ここで重要なのは、メソッドを直接実行しているわけではないという点です。 あくまでデリゲートとして「登録」しているだけで、実行されるのはイベントが起きたときです。

5. ラムダ式を使ったイベントハンドラ登録

5. ラムダ式を使ったイベントハンドラ登録
5. ラムダ式を使ったイベントハンドラ登録

C#では、デリゲートを使うときにラムダ式をよく使います。 ラムダ式は「その場で簡単に処理を書くための書き方」です。


button.Click += (sender, e) =>
{
    Console.WriteLine("ラムダ式でイベント処理を実行");
};

この書き方では、わざわざ別のメソッドを用意しなくても、その場でイベントハンドラを書けます。 「短い処理」「一度しか使わない処理」の場合は、ラムダ式を使うとコードが読みやすくなります。

ただし、処理が長くなってきた場合は、通常のメソッドとして分けたほうが理解しやすくなります。

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

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

イベントハンドラとデリゲートで、初心者が混乱しやすいポイントは次の3つです。

  • イベントは「自分で呼び出すもの」ではなく「起きたら自動で呼ばれるもの」
  • デリゲートは「処理そのもの」ではなく「処理への道しるべ」
  • 登録しないとイベントハンドラは動かない

この3点を意識すると、C#のイベント処理の仕組みが一気に理解しやすくなります。 最初は完全に理解できなくても、「こういう流れなんだ」と慣れていくことが大切です。

カテゴリの一覧へ
新着記事
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
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方