、基础

在C# 里,异常处理就是C# 为处理错误情况提供的一种机制。它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来。

对.NET类来说,一般的异常类 System.Exception 派生于 System.Object。还有许多定义好的异常类(如:System.SystemException、System.ApplicationException等),他们又派生于 System.Exception 类。其中System.ApplicationException 类是第三方定义的异常类,如果我们要自定义异常类,那么就应派生于它。

在代码中对异常进行处理,一般要使用三个代码块:

Ø Try 块的代码是程序中可能出现错误的操作部分。

Ø Catch 块的代码是用来处理各种错误的部分(可以有多个)。必须正确排列捕获异常的catch子句,范围小的Exception放在前面的catch。即如果Exception之间存在继承关系,就应把子类的Exception放在前面的catch子句中

Ø Finally 块的代码用来清理资源或执行要在try块末尾执行的其他操作(可以省略)。且无论是否产生异常,Finally块都会执行。

二、异常处理

不管程序写得再好,异常都可能会发生,而程序也必须能够处理可能出现的错误。所以我们要站在异常一定可能会发生的角度来编写异常处理程序,应对程序有可能发生的错误建立一个良好的异常处理策略。

异常产生的时候,我们想知道的是什么原因造成的错误以及错误的相关信息。我们可以根据实际情况抛出具体类型的异常,方便捕捉到异常时做出具体的处理。在编写代码过程中,可以使用系统已定义的相关异常类以及自定义的异常类来实例化并抛出我们需要的异常。如一个不可能实现的接口,我们可以抛出“System.NotSupportedExceptiion”的异常来告诉接口的调用者。

在处理异常的时候,我们应该将可处理的具体异常分别在catch 块中做出相应处理,否则程序将终止运行。针对每一种异常,以不同方式处理,避免对所有异常做出一样的处理。并且在异常产生时,给用户一个友好的提示(普通用户对异常的具体内容是不明白的,这就需要我们给出相关的简要信息和解决方案,或则告之联系管理员等。),并在可能的情况下给用户提供可能的选择(终止,重试,忽略),让用户来决定程序的运行方向。同时,要将异常做日志记录。但不是所有异常都是必须记录的,比如一些可预料并且能让程序解决的错误我们就不需要记录它。

记录异常我们可以采取如下一些方式:

Ø 在文件中记录异常。便于技术人员查看所发生的异常,从而日后对程序进行改进。

Ø 在数据库中记录异常。数据库支持查询,这样在后期就能够对异常进行分类查询等操作,便于查看与管理。

Ø 在Eventlog中记录异常:能够远程操作,方便系统管理员监控所有计算机的异常。

除了具体的、可预料到的异常外,还有未预料的异常。像这类异常是我们不愿意看到了,但发生了也只能暂时结束程序的运行,这里如果做好了日志就能为我们解决和调试问题带来了方便。还有,要避免使用了try-catch但没有处理异常的情况,否则就相当于给异常放行(这种情况还不如根本就不去捕获它)。

处理完异常,我们还应该注意在finally块中释放相关资源、还原相关设置信息等收尾工作。

在做异常处理的时候,最好能在应用程序所有的入口处(事件处理函数,主函数,线程入口)使用try-catch。 但是不要在程序构造函数入口处添加try-catch,因为此处产生异常,它自己并没有能力来处理,因为它还没有构造完毕,只能再向外层抛出异常。

在一般情况下使用异常机制来处理错误,能使整个程序的结构清晰、代码简单(标识错误的代码与处理错误代码分离),但我们也不能盲目使用异常。而且使用异常,可能会在一定程度上影响到程序的性能(C#中使用异常一般不影响性能)。对于一些简单的、能够提前避免的错误,我们还是应该在try块外面及早做出处理。

C#异常类相关总结

C#异常类一、基类Exception

C#异常类二、常见的异常类

1、SystemException类:该类是System命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)

2、ApplicationException类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)

C#异常类三、与参数有关的异常类

此类异常类均派生于SystemException,用于处理给方法成员传递的参数时发生异常

1、ArgumentException类:该类用于处理参数无效的异常,除了继承来的属性名,此类还提供了string类型的属性ParamName表示引发异常的参数名称。

2、FormatException类:该类用于处理参数格式错误的异常。

C#异常类四、与成员访问有关的异常

1、MemberAccessException类:该类用于处理访问类的成员失败时所引发的异常。失败的原因可能的原因是没有足够的访问权限,也可能是要访问的成员根本不存在(类与类之间调用时常用)

2、MemberAccessException类的直接派生类:

i、FileAccessException类:该类用于处理访问字段成员失败所引发的异常

ii、MethodAccessException类:该类用于处理访问方法成员失败所引发的异常

iii、MissingMemberException类:该类用于处理成员不存在时所引发的异常

C#异常类五、与数组有关的异常

以下三个类均继承于SystemException类

1、IndexOutOfException类:该类用于处理下标超出了数组长度所引发的异常

2、ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元素所引发的异常

3、RankException类:该类用于处理维数错误所引发的异常

C#异常类六、与IO有关的异常

1、IOException类:该类用于处理进行文件输入输出操作时所引发的异常。

2、IOException类的5个直接派生类:

i、DirectionNotFoundException类:该类用于处理没有找到指定的目录而引发的异常。

ii、FileNotFoundException类:该类用于处理没有找到文件而引发的异常。

iii、EndOfStreamException类:该类用于处理已经到达流的末尾而还要继续读数据而引发的异常。

iv、FileLoadException类:该类用于处理无法加载文件而引发的异常。

v、PathTooLongException类:该类用于处理由于文件名太长而引发的异常。

C#异常类七、与算术有关的异常

1、ArithmeticException类:该类用于处理与算术有关的异常。

2、ArithmeticException类的派生类:

i、DivideByZeroException类:表示整数货十进制运算中试图除以零而引发的异常。

ii、NotFiniteNumberException类:表示浮点数运算中出现无穷打或者非负值时所引发的异常。

C#简介和异常类总结相关推荐

  1. java异常类 Object类

    1.Object类 Object类是所有类的父类,是最顶层的父类. 当一个类没有直接继承其它父类时,这个类的直接父类就是Object类. class Person { ... } 等价于 class ...

  2. PHP 异常类 Exception 高洛峰 细说PHP

    /** 1.自定义的异常类,必须是系统类Exception的子类* 如果继承Exception类,重写了构造方法,一定要调用一下父类的构造方法.*/class MyException extends ...

  3. java异常(机制和捕捉(常见异常类))详解 +练习题

    Java 中的异常处理机制 1.什么是异常 异常:程序在运行过程中产生的不正常情况. 程序在运行的时候,发生了一些不被预期的事件,从而没有按照我们编写的代码执行,这就是异常. 异常是Java中的错误, ...

  4. java 异常类_Java异常处理

    Java 异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你 ...

  5. 转帖:.net中的异常类小结

    一.基类Exception 二.常见的异常类 1.SystemException类:该类是System命名空间中所有其他异常类的基类.(建议:公共语言运行时引发的异常通常用此类) 2.Applicat ...

  6. Java实用教程笔记 内部类与异常类

    内部类与异常类 Review Note 只有我能用,不希望别人用(内部类的基本思想) .class文件的生成个数 匿名类 匿名类都是一次性的(当前这一次,以后不能用) Conclusion Revie ...

  7. java异常类子类和父类的关系

    java异常类子类和父类的关系 参考文章: (1)java异常类子类和父类的关系 (2)https://www.cnblogs.com/xiaoliangyuu/p/5596008.html 备忘一下 ...

  8. Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

    Java 创建用户异常类.将异常一直向上抛. throw和throws的区别 参考文章: (1)Java 创建用户异常类.将异常一直向上抛. throw和throws的区别 (2)https://ww ...

  9. java中常见的异常类

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

最新文章

  1. iOS app 切图
  2. SpringBoot框架+Thymeleaf模板引擎实现发送HTML格式邮件(可带附件)
  3. python中difflib_python中的difflib
  4. 60级怀旧服最新服务器人口排名,魔兽世界怀旧服10月最新人口普查详情 各大服务器阵营详细比例...
  5. 一枚比特币30多万,家用电脑24小时挖矿,多久才能挖到一枚?
  6. 【前端学习笔记】JavaScript + jQuery + Vue.js + Element-UI
  7. 开启了ADB,就等于配了一把家门钥匙给别人!
  8. java 解析xml文件案例
  9. 17.词法分析和语法分析
  10. 数据中心建筑设计及功能区布局的注意事项
  11. python table删除一列_在python中从dataframe中删除多个列
  12. 教你轻松创建谷歌账号、谷歌邮箱!
  13. linux iio子系统
  14. python跳一跳编程构造_Python玩“跳一跳” iOS+Win 硬件实现
  15. adb connect 连接机顶盒显示:由于目标计算机积极拒绝,无法连接10061
  16. 手机锁机病毒解锁清除教程
  17. Myeclipes 10 cracker.jar破解文件指定路径错误
  18. 服装标准中纰裂试验方法的比较与探讨
  19. uni-app使用countdown插件实现倒计时
  20. 技术实验—使用selenium打开百度搜索关键字

热门文章

  1. Soul回应下架整改:将严格审核相关功能和内容
  2. 外媒称苹果挖走特斯拉高管 可能将重启电动汽车开发
  3. 12864汉字液晶显示驱动程序
  4. 对一个带小数的数进行四舍五入取整
  5. 关于Java交换两个对象的问题
  6. php v命令找不到,-bash: php: command not found 命令找不到
  7. OpenCV系列(一)之图像平滑
  8. linux内核实验教程答案,20199310《Linux内核原理与分析》第十五周作业 Linux安全实验...
  9. python字典和集合对象可以进行索引操作_python字典和列表的高级应用
  10. 电脑怎么分盘win10_电脑时间不对怎么办?Win10电脑时间总是不对的解决方法_电脑故障...