C#高级编程八十二天----用户自己定义异常类

时间:2023-03-09 16:22:15
C#高级编程八十二天----用户自己定义异常类

用户自己定义异常类

前面已经说了不少关于异常的问题了,如今来给大家说一下自己定义异常时咋个回事以及咋样.

 

为啥会出现自己定义异常类呢?

用用脚趾头想想也明确,是为了定义咱们自己的异常,自己定义异常类继承自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)

        { }

    }