カテゴリ: C# 更新日: 2026/07/24

C#の匿名メソッド(delegateキーワード)をやさしく理解しよう!初心者向け完全解説

C#の匿名メソッド(delegateキーワード)を理解しよう
C#の匿名メソッド(delegateキーワード)を理解しよう

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

生徒

「C#のコードを見ていたら、delegateって書いてある不思議な書き方がありました。あれは何ですか?」

先生

「それは匿名メソッドと呼ばれる書き方です。名前を持たないメソッドを、その場で作れる仕組みなんですよ。」

生徒

「名前がないメソッドなんて、必要なんですか?」

先生

「はい。短い処理を一時的に使いたいときに、とても便利です。では、基本から順番に見ていきましょう。」

1. 匿名メソッドとは何か?

1. 匿名メソッドとは何か?
1. 匿名メソッドとは何か?

C#の匿名メソッドとは、名前を付けずに定義する特別なメソッドのことです。 通常のメソッドは名前を決めてから使いますが、匿名メソッドは「その場限りの処理」として使われます。

プログラミング初心者の方は、「名前がないと使えないのでは?」と感じるかもしれません。 しかしC#では、デリゲートという仕組みを使うことで、名前のないメソッドでも安全に扱えます。

例えるなら、匿名メソッドは「付せんに一言メモを書いて、一時的に机に貼る」ような存在です。 ノートに正式に書くほどではないけれど、今だけ使いたい情報を手軽に残せます。

2. delegateキーワードの役割

2. delegateキーワードの役割
2. delegateキーワードの役割

匿名メソッドを理解するためには、delegate(デリゲート)という言葉を知る必要があります。 デリゲートとは、「メソッドを入れておける箱」のようなものです。

普通の変数には数値や文字を入れますが、デリゲートには処理そのものを入れます。 そして、あとからその処理を実行できます。

delegateキーワードは、「ここにメソッドの処理を書きますよ」という合図になります。 匿名メソッドでは、このキーワードを使って、その場で処理内容を定義します。

3. 匿名メソッドの基本的な書き方

3. 匿名メソッドの基本的な書き方
3. 匿名メソッドの基本的な書き方

それでは、C#で匿名メソッドを使った簡単な例を見てみましょう。 ここでは「文字を表示する処理」を匿名メソッドとして定義します。


delegate void MessageDelegate();

MessageDelegate showMessage = delegate ()
{
    Console.WriteLine("こんにちは、匿名メソッドです。");
};

showMessage();

最初にdelegate void MessageDelegate();と書いています。 これは「戻り値がなく、引数もない処理を入れられる箱」を作っている状態です。

次に、delegate () { ... }の部分が匿名メソッドです。 メソッド名がなく、直接処理内容だけが書かれているのが特徴です。


こんにちは、匿名メソッドです。

4. 引数を持つ匿名メソッド

4. 引数を持つ匿名メソッド
4. 引数を持つ匿名メソッド

匿名メソッドは、引数を受け取ることもできます。 引数とは、処理を実行するときに渡す「追加の情報」のことです。

例えば、「数字を受け取って画面に表示する」処理を考えてみましょう。


delegate void NumberDelegate(int number);

NumberDelegate showNumber = delegate (int number)
{
    Console.WriteLine("受け取った数字は " + number + " です。");
};

showNumber(10);

受け取った数字は 10 です。

このように、匿名メソッドでも通常のメソッドと同じように引数を使えます。 名前がないだけで、できることはほとんど変わりません。

5. なぜ匿名メソッドを使うのか?

5. なぜ匿名メソッドを使うのか?
5. なぜ匿名メソッドを使うのか?

「普通にメソッドを作ればいいのでは?」と感じる方も多いでしょう。 匿名メソッドが役立つのは、一度しか使わない短い処理です。

何度も使う処理に名前を付けるのは大切ですが、 一回しか使わない処理まで名前を付けると、コードが読みにくくなります。

匿名メソッドを使えば、処理の内容をその場で確認でき、 「この場所専用の処理なのだ」とすぐに分かります。 これが、C#で匿名メソッドが用意されている理由です。

6. 匿名メソッドとラムダ式の関係

6. 匿名メソッドとラムダ式の関係
6. 匿名メソッドとラムダ式の関係

C#では、匿名メソッドの考え方をさらに簡単に書けるラムダ式という仕組みがあります。 ラムダ式は、匿名メソッドを短く書いた形だと考えて問題ありません。

ただし、内部的な考え方は同じでも、まずは 「delegateキーワードを使った匿名メソッド」 を理解しておくと、C#の仕組みがしっかり身につきます。

基礎を押さえることで、後から出てくる新しい書き方も、無理なく理解できるようになります。

まとめ

まとめ
まとめ

ここまでで、しーしゃーぷにおけるとくめいめそっどのきほんからでりげーとのやくわり、ひきすうのつかいかた、そしてらむだしきとのかんけいまでをていねいにみてきました。とくめいめそっどは、なまえをもたないめそっどでありながら、でりげーとというしくみをつかうことで、あんぜんにしょりをほぞんしたり、じっこうしたりできるてんがとてもじゅうようです。とくに、いちどしかつかわないたんいなしょりをわざわざめいめいしてめそっどとしてぶんりするよりも、そのばでしょりをかくことで、こーどのみとおしがよくなり、かいはつこうりつがあがります。

また、とくめいめそっどは、こーどをよみやすくするためのじゅうようなてくにっくのひとつでもあります。しょりのないようがそのばにかかれているため、べつのばしょにとんでないようをかくにんするひつようがなく、しょしんしゃでもりかいしやすいというとくちょうがあります。さらに、らむだしきへとつながるきそがいまのだんかいでしっかりみにつくため、げんだいのしーしゃーぷぷろぐらみんぐをりかいするうえでひじょうにたいせつなすてっぷとなります。

とくに、いべんとしょりやりすとそうさくなど、でりげーとがかかわるばめんでは、とくめいめそっどのりかいがそのままおうようりょくにつながります。こーどをすっきりさせたいとき、しょりをそのばでかきたいときには、とくめいめそっどをつかうというせんたくしをもてるようになると、かいはつしゃとしてのれべるがひとつあがります。

サンプルプログラムで復習しよう

using System;

class Program
{
    delegate void GreetingDelegate(string name);

    static void Main()
    {
        GreetingDelegate greeting = delegate (string name)
        {
            Console.WriteLine(name + " さん、ようこそ。");
        };

        greeting("やまだ");
        greeting("さとう");
    }
}

やまだ さん、ようこそ。
さとう さん、ようこそ。

このように、とくめいめそっどをつかうことで、めそっどをべつにていぎしなくても、そのばでしょりをかくことができます。とくに、いちじてきなしょりや、かんたんなひょうじしょりなどにはとてもてきしています。

先生と生徒の振り返り会話

生徒

とくめいめそっどって、なまえがないのにちゃんとつかえるのがふしぎでした。でもでりげーとにいれることで、しょりとしてあつかえるんですね。

先生

そのとおりです。でりげーとはめそっどをいれるはこなので、とくめいでもしょりとしてほぞんできるのです。

生徒

いちどしかつかわないしょりなら、わざわざめそっどにしないで、そのばでかいたほうがよみやすいですね。

先生

そうですね。こーどのかんりといういみでも、とくめいめそっどはとてもゆうこうです。

生徒

らむだしきともかんけいがあるときいたので、つぎはそれもべんきょうしてみたいです。

先生

とてもよいですね。とくめいめそっどをりかいしておくと、らむだしきもすんなりりかいできますよ。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#の匿名メソッドとは何ですか?初心者でも理解できるように教えてください

C#の匿名メソッドとは、名前を付けずにその場で定義できる特別なメソッドのことです。通常のメソッドは名前を決めて再利用しますが、匿名メソッドは一時的な処理に使うため、コードをシンプルに保つことができます。
カテゴリの一覧へ
新着記事
New1
C#
C#とは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
New2
C#
C#のメソッドを引数に渡す方法!高階関数の基本を学ぼう
New3
Azure
Azure Front Door Analytics活用|リアルタイム監視とレポートで通信を分析
New4
COBOL
COBOLで数値比較とALPHABETIC・NUMERIC条件をやさしく解説!初心者でも安心ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.2
Java&Spring記事人気No2
COBOL
COBOL教育における教材とリソース完全ガイド!初心者でもわかるプログラミング学習の選び方
No.3
Java&Spring記事人気No3
Azure
Azure SQL Database購入モデル比較!vCoreとDTUの違いと選び方を初心者向けに解説
No.4
Java&Spring記事人気No4
C#
C#のLINQでWhere句を使いこなす!初心者でもわかるデータ抽出とフィルタリング
No.5
Java&Spring記事人気No5
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本