この問題を解くためには…
 → 応用編第7日目参照

問題7:デリゲート・例外

prob7-1.(難易度:★)

以下のプログラムは、デリゲートを用いて、メソッドFunc1を呼び出している。このプログラムを改造し、デリゲートを用いて期待された実行結果のように、「Func2」と出力するように変更しなさい。ただし、24行目のdf()は変更しないこと。

プロジェクトProblemex7_1/Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problemex7_1
{
    class Program
    {
         //  デリゲート
        delegate void Delfunc();
        static void Func1()
        {
            Console.WriteLine("Func1");
        }
        static void Func2()
        {
            Console.WriteLine("Func2");
        }
        static void Main(string[] args)
        {
            Delfunc df = new Delfunc(Func1);
            df();
        }
    }
}
実行結果
Func1
期待される実行結果
Func2

prob7-2.(難易度:★)

以下のプログラムは、デリゲートを用いて、メソッドshowStarsを呼び出している。このプログラムを改造し、以下の期待される実行結果のようになるようにしなさい。ただし、処理は、47行目に出ているf(4)一行ですべてできるようにすること。

プロジェクトProblemex7_2/Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problemex7_2
{
    //  デリゲート
    delegate void Delegatefunc(int num);
    class Showcharas
    {
        //  星を表示
        public void ShowStars(int num)
        {
            for (int i = 0; i < num; i++)
            {
                Console.Write("☆");
            }
            Console.WriteLine();
        }
        //  資格を表示
        public void ShowBoxes(int num)
        {
            for (int i = 0; i < num; i++)
            {
                Console.Write("■");
            }
            Console.WriteLine();
        }
        //  +を表示
        public void ShowPlus(int num)
        {
            for (int i = 0; i < num; i++)
            {
                Console.Write("+");
            }
            Console.WriteLine();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Showcharas s = new Showcharas();
            Delegatefunc f = new Delegatefunc(s.ShowStars);
            f(4);

        }
    }
}
実行結果
☆☆☆☆
期待される実行結果
☆☆☆☆
■■■■
++++

prob7-3.(難易度:★)

以下のプログラムは、実行時に例外が発生する。このプログラムにtry~catchを使って、適切な例外処理をつけて、期待する実行結果を得られるようにプログラムを変更しなさい。

プロジェクトProblemex7_3/Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problemex7_3
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = { 0 , 1, 2 };
            //  配列の内容を表示
            for(int i = 0; i < 4; i++){
                Console.WriteLine("a[" + i +"]=" + a[i]);
            }
        }
    }
}
実行結果
a[0]=0
a[1]=1
a[2]=2

ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。
    場所 Problemex7_3.Program.Main(string[] args)場所 …
期待される実行結果
a[0]=0
a[1]=1
a[2]=2
配列の範囲を超えています。