| この問題を解くためには… |
| → 応用編第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[1]=1
a[2]=2
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。
場所 Problemex7_3.Program.Main(string[] args)場所 …
a[0]=0
a[1]=1
a[2]=2
配列の範囲を超えています。
a[1]=1
a[2]=2
配列の範囲を超えています。









