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

C#のデリゲートとイベントの違い・使い分け方を完全解説!初心者でも安心

C#のデリゲートとイベントの違い・使い分け方を解説
C#のデリゲートとイベントの違い・使い分け方を解説

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

生徒

「C#を勉強していたら、デリゲートとイベントという言葉が出てきました。何が違うんですか?」

先生

「どちらも“何かが起きたときに処理を実行する仕組み”ですが、役割と使い道が少し違います。」

生徒

「パソコンを触ったことがない人でも分かるように教えてもらえますか?」

先生

「もちろんです。身近なたとえを使いながら、基本から順番に見ていきましょう。」

1. デリゲートとは何か?

1. デリゲートとは何か?
1. デリゲートとは何か?

C#のデリゲート(delegate)とは、「メソッド(処理のまとまり)を変数のように扱うための仕組み」です。変数が数値や文字を入れる箱だとすると、デリゲートは処理そのものを入れる箱だと考えると分かりやすいです。

たとえば、リモコンのボタンを想像してください。ボタン自体は「何をするか」を知りませんが、押されたときに実行される動作が登録されています。この「押されたら実行される動作」が、C#のデリゲートに近い考え方です。

デリゲートを使うことで、「どの処理を実行するか」を後から自由に差し替えることができます。これにより、プログラムの柔軟性が高まり、同じ仕組みを使い回せるようになります。

2. デリゲートの簡単な例

2. デリゲートの簡単な例
2. デリゲートの簡単な例

まずは、C#のデリゲートをとても簡単な例で見てみましょう。ここでは「メッセージを表示する処理」をデリゲートに登録します。


delegate void MyDelegate();

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

static void Main()
{
    MyDelegate d = Hello;
    d();
}

この例では、MyDelegateという名前のデリゲートを作り、Helloというメソッドを登録しています。d()と書くと、記憶されている処理が実行されます。

難しい言葉が出てきましたが、「デリゲートは処理を呼び出すためのスイッチ」と覚えておくと十分です。


こんにちは

3. イベントとは何か?

3. イベントとは何か?
3. イベントとは何か?

イベント(event)は、デリゲートを安全に使うための仕組みです。特に、「何かが起きたことを他の場所に知らせたいとき」に使われます。

たとえば、家のインターホンを想像してください。ボタンが押されると音が鳴りますが、勝手に別の人が音の鳴らし方を変えることはできません。このように、通知する側が主導権を持つ仕組みがイベントです。

C#では、ボタンがクリックされたとき、ファイルが保存されたとき、データが変更されたときなど、「出来事」を扱う場面でイベントがよく使われます。

4. イベントの基本的な例

4. イベントの基本的な例
4. イベントの基本的な例

次に、イベントを使った簡単な例を見てみましょう。ここでは「ボタンが押された」という出来事を表現します。


delegate void ClickHandler();

class Button
{
    public event ClickHandler Click;

    public void Push()
    {
        if (Click != null)
        {
            Click();
        }
    }
}

static void OnClick()
{
    Console.WriteLine("ボタンが押されました");
}

static void Main()
{
    Button button = new Button();
    button.Click += OnClick;
    button.Push();
}

このコードでは、Clickというイベントに処理を登録しています。イベントは「起きたことを知らせるだけ」で、外部から勝手に実行することはできません。


ボタンが押されました

5. デリゲートとイベントの違い

5. デリゲートとイベントの違い
5. デリゲートとイベントの違い

ここまでで、それぞれの役割が少し見えてきました。整理すると、次のような違いがあります。

  • デリゲート:処理を自由に呼び出せる
  • イベント:出来事の通知専用で、安全性が高い

デリゲートは便利ですが、誰でも実行できてしまうため、意図しない動作につながることがあります。一方イベントは、「通知する側だけが実行できる」ため、安心して使えます。

6. どう使い分ければよいのか?

6. どう使い分ければよいのか?
6. どう使い分ければよいのか?

使い分けのポイントはとてもシンプルです。

・内部処理の切り替え → デリゲート
・何かが起きたことを知らせたい → イベント

たとえば、計算方法を差し替えたい場合はデリゲート、ボタン操作やユーザーの動作を通知したい場合はイベントが向いています。

プログラミング未経験の方は、「イベントはお知らせ、デリゲートは道具」と覚えると理解しやすくなります。

カテゴリの一覧へ
新着記事
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演算子の違いと使い方