用戶自定義異常類
前面已經說了不少關於異常的問題了,現在來給大家說一下自定義異常時咋個回事以及咋樣.
為啥會出現自定義異常類呢?用用腳趾頭想想也明白,是為了定義咱們自己的異常,自定義異常類繼承自ApplicationException
首先異常(Exception)分為兩大類,一個是預定義的異常類,后者是用戶自定義異常類時需要繼承的類.
案例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 自定義異常類
{
class Program
{
static void Main(string[] args)
{
//還是上一句的案例
Console.WriteLine("輸入一個0到5的數: ");
try
{
//這句話你肯定也知道
//不知道的話,你查看一下Parse的意思就明白了,別指望我啥都說到!
int num = int.Parse(Console.ReadLine());
if (num < 0 || num > 5)
{
throw new MyException("你搞笑嗎? 逗我呢?");
}
}
catch (MyException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("我還是那個牛X的finally ! ");
}
Console.ReadKey();
}
}
public class MyException : ApplicationException
{
//public MyException (){}
public MyException(string message) : base(message) { }//這句話知道是干的吧?別和我說你忘了!!
public override string Message
{
get
{
return base.Message;
}
}
}
}
這里面自定義了異常類MyException:ApplicationException,catch(MyException me)用戶捕獲自定義異常,catch(Exception e)用於捕獲一般異常,如果異常被第一個catch捕獲,那么第二個catch將不會執行,直接執行finally中的語句。
下面說一下自定義的異常類通常要注意的以下幾點:
1.如果你的異常類是需要寫入文件的,如日志,則需要將異常類聲明為可序列化的[Serializable]
2.要實現一個無參數的構造函數,因為可能會拋出無參數異常
3.實現一個包含message的構造函數
4.實現一個包含message以及內部異常類型的構造函數
5.添加自己的從錯誤識別數據成員
所以:一般情況下自定義的格式是這樣的
class MyException : ApplicationException
{
//這是無參構造函數,作用試試啊自己去看上面
public MyException()
{ }
public MyException(string message)
: base(message)
{ }
public MyException(string message, Exception inner)
: base(message, inner)
{ }
}