嗨嗨~今天要來說說自訂例外處理
如果我們遇到特殊錯誤,系統並沒有提供此種判斷,自己也可以另外寫程式來處理特殊錯誤,throw即可完成。
假設現在輸入成績0~100不發生錯誤,如果超過範圍或其他字串資料就顯示錯誤,程式如下:
namespace project
{
internal class Program
{
private static void KeyInScore(out int score)
{
Console.Write("輸入成績(0~100):");
score = int.Parse(Console.ReadLine());
if (score < 0 || score > 100)
throw new ArgumentOutOfRangeException();
else
Console.WriteLine("成績正常");
}
static void Main(string[] args)
{
int score;
while(true)
{
try
{
KeyInScore(out score);
break;
}
catch(ArgumentOutOfRangeException ex)
{
Console.WriteLine("不合範圍成績");
}
catch(Exception ex)
{
Console.WriteLine("非數字輸入");
}
}
}
}
}
若 .NET Framework所提供的例外類別不夠使用,可以使用物件導向繼承的機制,將系統提供的例外加入延伸、增加功能,且也可以覆寫原有系統例外類別的方法及屬性,或增加新的方法或屬性。
我們來做個練習,假設我們現在要給員工分配薪水,薪水必須要高於23000,如果超過23000就會產生SalaryException例外類別,此類別是我們自訂的,繼承自Exception例外類別,SalaryException覆寫ToString()及Message,再新增ShowMsg()。
namespace project
{
class SalaryException:Exception
{
public override String ToString()
{
return "發生薪水例外錯誤";
}
public override String Message
{
get
{
return "薪水不能低於23000";
}
}
public void ShowMsg()
{
Console.WriteLine("如果薪水低於23000,將會通報勞動局。");
}
}
class Empolyee
{
private string _name;
private int _salary;
public Empolyee(string name)
{
_name = name;
}
public int Salary
{
get
{
return _salary;
}
set
{
if(value<23000)
{
Console.WriteLine("員工{0}薪水{1}設定失敗", _name, value);
throw new SalaryException();
}
else
{
_salary = value;
}
}
}
public void ShowSalary()
{
Console.WriteLine("員工{0}的薪水{1}", _name, Salary);
}
}
internal class Program
{
static void Main(string[] args)
{
try
{
Empolyee tom = new Empolyee("湯姆");
tom.Salary = 50000;
tom.ShowSalary();
Console.WriteLine("===============");
Empolyee peter = new Empolyee("彼得");
peter.Salary = 22000;
peter.ShowSalary();
}
catch(SalaryException ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine(ex.Message);
ex.ShowMsg();
}
}
}
}
今天就先這樣啦~
大家掰掰