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

C#のデリゲートとは?基本の仕組みと使い方を解説

C#のデリゲートとは?基本の仕組みと使い方を解説
C#のデリゲートとは?基本の仕組みと使い方を解説

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

生徒

「C#のデリゲートって何に使うものなんですか?」

先生

「デリゲートは、メソッドを変数のように扱うためのしくみです。」

生徒

「メソッドを変数みたいに扱うってどういうことですか?想像できません…」

先生

「例えば、ゲームで『攻撃』『回復』『防御』など、状況で実行する操作を切り替えたい場合に、とても便利なんですよ。」

生徒

「なるほど!もっと詳しく知りたいので教えてください!」

1. C#のデリゲートとは?

1. C#のデリゲートとは?
1. C#のデリゲートとは?

デリゲート(delegate)とは、C#でメソッド(処理のまとまり)を指し示して、あとから呼び出すための型のことです。メソッドを箱に入れて持ち運ぶようなイメージです。普通はメソッド名を直接書いて呼び出しますが、デリゲートを使うと、どのメソッドを動かすかを柔軟に切り替えられます。

状況によって実行するメソッドが変わる場合に、とても役立ちます。プログラムをより柔軟にし、後から変更しやすくする効果があります。C#のラムダ式やイベント処理とも強く関係している重要な技術です。

2. デリゲートの基本的な書き方

2. デリゲートの基本的な書き方
2. デリゲートの基本的な書き方

まず最初は、デリゲートがどのように宣言されるのかを見てみましょう。デリゲートは、戻り値と引数の型を指定して宣言します。


delegate void MessageDelegate(string message);

上記は、string型の引数を1つ受け取り、戻り値がない(void)メソッドを入れられるデリゲートです。

3. デリゲートにメソッドを登録して実行する例

3. デリゲートにメソッドを登録して実行する例
3. デリゲートにメソッドを登録して実行する例

実際にメソッドを登録し、実行してみるサンプルを見てみましょう。


using System;

delegate void MessageDelegate(string message);

class Program
{
    static void SayHello(string msg)
    {
        Console.WriteLine("こんにちは! " + msg);
    }

    static void Main()
    {
        MessageDelegate del = SayHello;
        del("C#デリゲートの世界へようこそ!");
    }
}

実行結果:


こんにちは! C#デリゲートの世界へようこそ!

この例では、SayHelloメソッドをMessageDelegate型の変数delに登録し、delとして実行しています。つまり、delを呼び出すとメソッドSayHelloが動きます。これが「メソッドを変数のように扱う」という意味です。

4. デリゲートが役に立つ場面の例

4. デリゲートが役に立つ場面の例
4. デリゲートが役に立つ場面の例

デリゲートは、次のようなシーンでとても便利です。

  • 操作の種類を切り替える処理(ゲームの攻撃・回復の切替など)
  • 処理をまとめて実行したいとき
  • イベント処理(ボタンクリック等)
  • プラグイン方式の仕組み

例えば、ゲームのキャラクターの行動を変更するイメージを考えてみましょう。


delegate void ActionDelegate();

static void Attack() { Console.WriteLine("攻撃した!"); }
static void Heal() { Console.WriteLine("回復した!"); }

static void Main()
{
    ActionDelegate action = Attack;
    action();   // 攻撃

    action = Heal;
    action();   // 回復
}

攻撃した!
回復した!

状況に応じて、同じ変数actionに入れるメソッドを変更できるので、コードを大きく書き換える必要がありません。これがデリゲートの大きなメリットです。

5. デリゲートを理解するための例え

5. デリゲートを理解するための例え
5. デリゲートを理解するための例え

デリゲートは「テレビのリモコン」に例えると分かりやすいです。リモコンは本体から離れていてもチャンネルを操作できます。リモコンはテレビにどのボタンを押したかを伝えますが、どの番組を映すかはその時次第で変えられます。デリゲートは、この「ボタンの指示」を預かる役割をしています。

つまり、どのメソッドを実行するかを後から選べる「メソッドのリモコン」がデリゲートです。

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLとJava・.NETが共演!段階的モダナイゼーションでシステムを最新化する方法
New2
C#
C#でループの中に条件分岐を書く方法!入れ子制御構造の基本
New3
C#
C#のthrow文の基本!例外を自分で発生させる方法
New4
C#
C#のADO.NETの基礎!SqlConnectionとSqlCommandの使い方を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.3
Java&Spring記事人気No3
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.4
Java&Spring記事人気No4
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.5
Java&Spring記事人気No5
COBOL
COBOLのコンパイラと開発環境を徹底解説!初心者にもわかりやすい入門ガイド
No.6
Java&Spring記事人気No6
COBOL
COBOLの帳票レイアウトを美しく!可読性向上テクニックを徹底解説
No.7
Java&Spring記事人気No7
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.8
Java&Spring記事人気No8
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説