用户自己定义异常类
前面已经说了不少关于异常的问题了,如今来给大家说一下自己定义异常时咋个回事以及咋样.
?
为啥会出现自己定义异常类呢?
用用脚趾头想想也明确,是为了定义咱们自己的异常,自己定义异常类继承自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)
????????{?}
????}
?