C#の匿名メソッド(delegateキーワード)をやさしく理解しよう!初心者向け完全解説
生徒
「C#のコードを見ていたら、delegateって書いてある不思議な書き方がありました。あれは何ですか?」
先生
「それは匿名メソッドと呼ばれる書き方です。名前を持たないメソッドを、その場で作れる仕組みなんですよ。」
生徒
「名前がないメソッドなんて、必要なんですか?」
先生
「はい。短い処理を一時的に使いたいときに、とても便利です。では、基本から順番に見ていきましょう。」
1. 匿名メソッドとは何か?
C#の匿名メソッドとは、名前を付けずに定義する特別なメソッドのことです。 通常のメソッドは名前を決めてから使いますが、匿名メソッドは「その場限りの処理」として使われます。
プログラミング初心者の方は、「名前がないと使えないのでは?」と感じるかもしれません。 しかしC#では、デリゲートという仕組みを使うことで、名前のないメソッドでも安全に扱えます。
例えるなら、匿名メソッドは「付せんに一言メモを書いて、一時的に机に貼る」ような存在です。 ノートに正式に書くほどではないけれど、今だけ使いたい情報を手軽に残せます。
2. delegateキーワードの役割
匿名メソッドを理解するためには、delegate(デリゲート)という言葉を知る必要があります。 デリゲートとは、「メソッドを入れておける箱」のようなものです。
普通の変数には数値や文字を入れますが、デリゲートには処理そのものを入れます。 そして、あとからその処理を実行できます。
delegateキーワードは、「ここにメソッドの処理を書きますよ」という合図になります。
匿名メソッドでは、このキーワードを使って、その場で処理内容を定義します。
3. 匿名メソッドの基本的な書き方
それでは、C#で匿名メソッドを使った簡単な例を見てみましょう。 ここでは「文字を表示する処理」を匿名メソッドとして定義します。
delegate void MessageDelegate();
MessageDelegate showMessage = delegate ()
{
Console.WriteLine("こんにちは、匿名メソッドです。");
};
showMessage();
最初にdelegate void MessageDelegate();と書いています。
これは「戻り値がなく、引数もない処理を入れられる箱」を作っている状態です。
次に、delegate () { ... }の部分が匿名メソッドです。
メソッド名がなく、直接処理内容だけが書かれているのが特徴です。
こんにちは、匿名メソッドです。
4. 引数を持つ匿名メソッド
匿名メソッドは、引数を受け取ることもできます。 引数とは、処理を実行するときに渡す「追加の情報」のことです。
例えば、「数字を受け取って画面に表示する」処理を考えてみましょう。
delegate void NumberDelegate(int number);
NumberDelegate showNumber = delegate (int number)
{
Console.WriteLine("受け取った数字は " + number + " です。");
};
showNumber(10);
受け取った数字は 10 です。
このように、匿名メソッドでも通常のメソッドと同じように引数を使えます。 名前がないだけで、できることはほとんど変わりません。
5. なぜ匿名メソッドを使うのか?
「普通にメソッドを作ればいいのでは?」と感じる方も多いでしょう。 匿名メソッドが役立つのは、一度しか使わない短い処理です。
何度も使う処理に名前を付けるのは大切ですが、 一回しか使わない処理まで名前を付けると、コードが読みにくくなります。
匿名メソッドを使えば、処理の内容をその場で確認でき、 「この場所専用の処理なのだ」とすぐに分かります。 これが、C#で匿名メソッドが用意されている理由です。
6. 匿名メソッドとラムダ式の関係
C#では、匿名メソッドの考え方をさらに簡単に書けるラムダ式という仕組みがあります。 ラムダ式は、匿名メソッドを短く書いた形だと考えて問題ありません。
ただし、内部的な考え方は同じでも、まずは
「delegateキーワードを使った匿名メソッド」
を理解しておくと、C#の仕組みがしっかり身につきます。
基礎を押さえることで、後から出てくる新しい書き方も、無理なく理解できるようになります。