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

C#のデリゲートの宣言とインスタンス化の方法を学ぼう|初心者向け解説

C#のデリゲートの宣言とインスタンス化の方法を学ぼう
C#のデリゲートの宣言とインスタンス化の方法を学ぼう

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

生徒

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

先生

「デリゲートは、簡単に言えばメソッドを変数のように扱える仕組みのことです。後から実行する処理を渡したり、順番を変えたりできるようになります。」

生徒

「メソッドを変数ってどういうことですか?イメージがわきません…」

先生

「例えば、テレビのリモコンのボタンのように、同じボタンでも中に入っている動作を変えられる仕組みだと考えると分かりやすいですよ。次の章で具体的に説明しながら使い方を学びましょう!」

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

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

C#のデリゲート(delegate)とは、メソッドを格納できる特別な型のことです。プログラムの中で処理の内容を切り替えたいときや、メソッドを別の場所へ渡したいときに役立ちます。デリゲートを使うことで、処理を柔軟に組み替えたり、追加したりできるようになります。

デリゲートを理解することは、C#のイベント処理コールバック処理ラムダ式などを学ぶための大切な基礎になります。特にユーザーインターフェース(UI)やゲーム開発、Webアプリケーション開発でデリゲートは非常によく使われます。

2. デリゲートの宣言方法

2. デリゲートの宣言方法
2. デリゲートの宣言方法

まず、デリゲートを使うには宣言(定義)が必要です。宣言は次のようにして行います。


public delegate void MessageDelegate(string message);

上の例では、MessageDelegateという名前のデリゲート型を作っています。voidは戻り値が無いメソッドの型、string messageは受け取る引数です。

つまりこのデリゲートは、文字列を1つ受け取って何かを行うメソッドを保持できる型という意味になります。

3. デリゲートのインスタンス化(オブジェクトとして使う)

3. デリゲートのインスタンス化(オブジェクトとして使う)
3. デリゲートのインスタンス化(オブジェクトとして使う)

宣言したデリゲートを実際に使うには、メソッドと紐づけてインスタンス化します。


public delegate void MessageDelegate(string message);

class Program
{
    static void PrintMessage(string msg)
    {
        Console.WriteLine(msg);
    }

    static void Main()
    {
        MessageDelegate del = new MessageDelegate(PrintMessage);
        del("こんにちは!デリゲートの学習中です。");
    }
}

実行結果:


こんにちは!デリゲートの学習中です。

ポイントは、デリゲートをPrintMessageメソッドに紐づけて、変数delとして保持している点です。まさに、リモコンのボタンにそのボタンが行う動作を登録しているイメージです。

4. デリゲートを使うメリット

4. デリゲートを使うメリット
4. デリゲートを使うメリット

デリゲートを利用すると、メソッドの切り替えがとても柔軟になります。例えば次のような場面で活躍します。

  • 処理のルールを切り替えたい
  • 別のメソッドを渡して、後から実行させたい
  • イベント通知など、決まった手順で処理を呼び出したい

次の例は、デリゲート変数に別のメソッドを登録し直すことで、出力内容を切り替える例です。


public delegate void MessageDelegate(string message);

class Program
{
    static void PrintJapanese(string msg)
    {
        Console.WriteLine("日本語:" + msg);
    }

    static void PrintEnglish(string msg)
    {
        Console.WriteLine("English: " + msg);
    }

    static void Main()
    {
        MessageDelegate del = PrintJapanese;
        del("こんにちは");

        del = PrintEnglish;
        del("Hello");
    }
}

実行結果:


日本語:こんにちは
English: Hello

このように、同じデリゲート変数delに別のメソッドを入れるだけで処理内容が変わるため、プログラム全体の自由度が大幅に高まります。

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

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

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
COBOL
COBOLの帳票レイアウトを美しく!可読性向上テクニックを徹底解説