用户自定义异常类

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

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

{ }

}

C#编程(八十二)---------- 用户自定义异常类的更多相关文章

  1. python第五十二课--自定义异常类

    myexception.py ''' 实现自定义异常类: ''' class MyException(Exception): def __init__(self,msg): super().__ini ...

  2. “全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  4. OpenCV2计算机编程手册(二)基于类的图像处理

    1. 在算法设计中使用策略(Strategy)模式 策略设计模式的目标是将算法封装在类中.因此,可以更容易地替换一个现有的算法,或者组合使用多个算法以拥有更复杂的处理逻辑.此外,该模式将算法的复杂度隐 ...

  5. (八十二)c#Winform自定义控件-穿梭框

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  6. java 面向对象编程 --第十二章 JDK常用类

    1.  系统类 java.lang包   System类 sys.out;sys.exit;sys.gc; sys.currentTimeMillis();----得到从1970-01-01到当前时间 ...

  7. 通过Socket实现TCP编程(十二)

    原文链接:https://www.cnblogs.com/hysum/p/7531529.html Socket通信 : TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 基于TCP ...

  8. Android IOS WebRTC 音视频开发总结(八十二)-- VP8对VP9,质量还是码率?

    本文主要介绍VP9(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blacke ...

  9. C#高级编程五十四天----Lookup类和有序字典

    Lookup类 Dictionary<Tkey,TValue>仅仅为每一个键支持一个值.新类Lookup<Tkey,TValue>是.NET3.5中新增的,它类似与Dictio ...

随机推荐

  1. 安装sass报错

    ERROR in Cannot find module 'node-sass' 执行:npm install sass-loader node-sass webpack --save-dev即可

  2. poj3579 二分套二分

    和poj3685类似,都是二分答案然后在判断时再二分 这题的内层二分可以用stl代替 /* 二分套二分,思路:升序排序数据,先二分答案x进行判断,判断时枚举每个元素,二分找到和其之差小于等于x的所有值 ...

  3. 【APUE | 10】函数signal

    函数signal 函数signal介绍 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t ...

  4. django url解析中的ResolverMatch

    了解这个问题,源于昨天开发时遇到的一个小小的问题. 问题描述如下: 比如,我有一个url,定义如下: path('res_edit/<app>/<env>/', AppResE ...

  5. mongo 复制集命令

    1.登录primary2.use admin >rs.add("new_node:port") 或 rs.add({"_id":4,"host& ...

  6. CDH搭建Hadoop集群(Centos7)

    一.说明 节点(CentOS7.5) Server  || Agent CPU node11 Server  || Agent 4G node12 Agent 2G node13 Agent 2G 二 ...

  7. CSS 3. 文本|字体|背景|定位

    1.文本属性和字体属性 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. 【Java】 剑指offer(57-1) 和为s的两个数字

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它 ...

  9. Quratz入门

    一:介绍 1.应用场景 基本上任何公司都会用到调度这个功能, 比如我们公司需要定期执行调度生成报表, 或者比如博客什么的定时更新之类的,都可以靠Quartz来完成.正如官网所说,小到独立应用大到大型电 ...

  10. 093实战 Nginx日志切割,以及脚本上传nginx的切割日志

    一:日志切割步骤 命令都在root下进行 1.创建目录 mkdir -p /etc/opt/modules/bin ## 创建文件夹 2.上传cut 3.观察目录 4.修改的cut文件 5.检测 需要 ...