プログラミング(Python、Perl、C、Go、JavaScript)、数学、読書…
開発環境
"初めてのC# 第2版"のp.319, 第16章(例外)の16.12(練習問題)、練習 16-1, 2を解いてみる。
練習 16-1
using System; using System.Collections.Generic; public class Cat { private int age; public int Age { get { return age; } set { age = value; } } public Cat(int age) { this.age = age; } } public class Tester { public void Run() { try { Cat cat1 = new Cat(1); Cat cat2 = new Cat(2); Cat cat3 = new Cat(3); List cats = new List(); cats.Add(cat1); cats.Add(cat2); cats.Add(cat3); Console.WriteLine( "猫({0})の年齢は{1}才", cats[2], cats[2].Age); // わざと例外を発生させてみる Console.WriteLine( "猫({0})の年齢は{1}才", cats[3], cats[3].Age); Console.WriteLine( "例外が発生した後なのでこれは処理されない"); } catch (ArgumentOutOfRangeException e) { Console.WriteLine( "例外: {0}", e.Message); } catch (Exception e) { Console.WriteLine( "不明の例外をキャッチ: {0}" + e.Message); } finally { Console.WriteLine( "これはCatオブジェクトの割り当ての" + "解除を趣味レートするfinallyブロックの処理"); } } static void Main() { Tester t = new Tester(); t.Run(); } }
出力結果
猫(Cat)の年齢は3才 例外: インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも 小さくなければなりません。 パラメーター名: index これはCatオブジェクトの割り当ての解除を趣味レートするfinallyブロックの処理 続行するには何かキーを押してください . . .
練習 16-2
using System; using System.Collections.Generic; public class Cat { private int age; public int Age { get { return age; } set { age = value; } } public Cat(int age) { this.age = age; } } public class CustomCatError : Exception { public CustomCatError(string message) : base(message) { } } public class Tester { private void CheckAge(Cat cat) { if (cat.Age <= 0) { CustomCatError e = new CustomCatError( "猫の年齢が0以下です"); throw e; } } private void CatManager(Cat cat) { CheckAge(cat); Console.WriteLine( "猫の年齢は{0}才", cat.Age); } public void Run() { try { Cat cat1 = new Cat(1); Cat cat2 = new Cat(-1); List cats = new List(); cats.Add(cat1); cats.Add(cat2); CatManager(cats[0]); CatManager(cats[1]); } catch (CustomCatError e) { Console.WriteLine(e.Message); } catch (ArgumentOutOfRangeException e) { Console.WriteLine( "例外: {0}", e.Message); } catch (Exception e) { Console.WriteLine( "不明の例外をキャッチ: {0}" + e.Message); } finally { Console.WriteLine( "これはCatオブジェクトの割り当ての" + "解除を趣味レートするfinallyブロックの処理"); } } static void Main() { Tester t = new Tester(); t.Run(); } }
猫の年齢は1才 猫の年齢が0以下です これはCatオブジェクトの割り当ての解除を趣味レートするfinallyブロックの処理 続行するには何かキーを押してください . . .
0 コメント:
コメントを投稿