C#のデリゲートは「こいつに任せる」という意味

プログラム

プログラミングやIT関連の用語はとにかくとっつきにくい!
C#というプログラミング言語を勉強していると、デリゲート(delegate)という聞きなれない言葉が出てくる。
マイクロソフトの.NET Frameworksドキュメントにあるサンプルプログラムをしばらく見ていてやっと分かった。

[sanko title=”List.ForEach(Action) Method” href=”https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.list-1.foreach?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DJA-JP%26k%3Dk(System.Collections.Generic.List%601.ForEach);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.6.1);k(DevLang-csharp)%26rd%3Dtrue&view=netframework-4.8″ site=”Microsoft Docs” target=”_blank”]

何が分かったかと言うと、デリゲートという言葉がとっつきにくいから理解に苦しむことをわたしは気づいたのだ。
そうだ!オイラ日本人だったよ、と思った瞬間だ。

普段わたしたち日本人は、「これ君にデリゲートするからさあ」なんて言わないものね。(もしかして言ってる?)

マイクロソフトサンプルはリスト型のデータに英語の人名を使ってコメントも英文という形だったので、日本人向けに人名も変え、コメントも変えたのが以下のC#デリゲートサンプル

Visual Studioを起動してメニューからプロジェクトの新規作成を選び、

テンプレート >Visual C# >コンソールアプリ(.NET Framework) を選択して作成。

プロジェクト名:デリゲートを使ったサンプル

using System;
using System.Collections.Generic;

namespace デリゲートを使ったサンプル
{
	class Program
	{
		static void Main(string[] args)
		{
			List<String> sosdan = new List<String>();

			sosdan.Add("涼宮ハルヒ");
			sosdan.Add("キョン");
			sosdan.Add("長門有希");
			sosdan.Add("朝比奈みくる");
			sosdan.Add("古泉一樹");

			// sosdanリストの内容を1つ1つ取り出して処理をPrintメソッドに任せる(デリゲートする)
			sosdan.ForEach(Print);

			// sosdanリストの内容を1つ1つ取り出して処理を匿名メソッドに任せる(デリゲートする)
			sosdan.ForEach(delegate (String name)
			{
				Console.WriteLine("匿名メソッド " + name);
			});
		}

		private static void Print(string s)
		{
			Console.WriteLine("Printメソッド " + s);
		}
	}
}

実行結果(コンソール表示)

Printメソッド 涼宮ハルヒ
Printメソッド キョン
Printメソッド 長門有希
Printメソッド 朝比奈みくる
Printメソッド 古泉一樹
匿名メソッド 涼宮ハルヒ
匿名メソッド キョン
匿名メソッド 長門有希
匿名メソッド 朝比奈みくる
匿名メソッド 古泉一樹

ちなみに

sosdan.ForEach(Print);

の部分は、

foreachを使って

foreach(String member in sosdan)
{
	Console.WriteLine(member);
}

のように記述できるところをPrintというメソッドに任せた(デリゲートした)からあっさりと1行ですんでいるわけだ。

と、こんな風にわたしは理解した。

ただし、これをどのタイミングで使えば良いかはまた別の話

コメント

タイトルとURLをコピーしました