匿名メソッド
前節で、デリゲートを指定するときに名前付きのメソッドを定義していました。C#2.0以降では匿名メソッドが導入されました。匿名メソッドは名前を持たないメソッドで、処理の部分のみを定義します。処理内容を一時的に用意する場合に利用します。
デリゲートで匿名メソッドを次のように定義します。
匿名メソッドでは引数がない場合は「()」を省略することもできます。
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
コンソール アプリケーション |
プロジェクト名 |
AnonymousTest |
サンプルダウンロード
○ 作成の準備
「DelegateTest」プロジェクトを修正して作成しましょう。DelegateTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。
○ プログラム
定義した加算・減算メソッドを削除して、次のように修正してください。
Program.cs
- class Program
- {
- //デリゲート型の宣言
- public delegate void Calc(int num1, int num2);
- //計算機メソッドの定義
- public static void Calculation(Calc calc, int num1, int num2)
- {
- Console.WriteLine("計算を開始します。。。");
- calc(num1, num2);
- Console.WriteLine();
- }
- static void Main(string[] args)
- {
- //デリゲート型の変数を宣言
- Calc calc;
- //計算用の変数を宣言
- int data1, data2;
- while (true)
- {
- //メニューを表示
- Console.Write("1)加算 2)減算 9)両方 その他)終了:");
- string menunum = Console.ReadLine();
- try
- {
- if (!(menunum == "1" || menunum == "2" || menunum == "9"))
- {
- return;
- }
- //2つの数字を入力
- Console.Write("1つ目のデータ:");
- data1 = Int32.Parse(Console.ReadLine());
- Console.Write("2つ目のデータ:");
- data2 = Int32.Parse(Console.ReadLine());
- switch(menunum)
- {
- case "1":
- //加算メソッドをデリゲートにセット
- calc = delegate(int dt1, int dt2)
- {
- Console.WriteLine("足し算の結果は" + (dt1 + dt2) + "です。");
- };
- break;
- case "2":
- //減算メソッドをデリゲートにセット
- calc = delegate(int dt1, int dt2)
- {
- Console.WriteLine("引き算の結果は" + (dt1 - dt2) + "です。");
- };
- break;
- case "9":
- //加算・減算メソッドをデリゲートにセット
- calc = delegate(int dt1, int dt2)
- {
- Console.WriteLine("足し算の結果は" + (dt1 + dt2) + "です。");
- };
- calc += delegate(int dt1, int dt2)
- {
- Console.WriteLine("引き算の結果は" + (dt1 - dt2) + "です。");
- };
- break;
- default:
- return;
- }
- //計算機メソッドを実行
- Calculation(calc, data1, data2);
- }
- catch(Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
- }
- }
○ 解説
53~56、60~63、67~74行目で匿名メソッドを指定しています。ブロック内に処理を直接書くことで、名前のないメソッドを指定し、デリゲートに登録しています。
前へ 次へ