カテゴリ: 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
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演算子の違いと使い方