C#中的异常处理

文章目录

    • 1 异常处理的引入
      • 1.1 为什么需要异常处理
      • 1.2 没有异常处理的程序
    • 2 异常类Exception
      • 2.1 .NET Framework中异常的设计架构
      • 2.2 常用的异常类型
    • 3 C#中的异常处理
      • 3.1 异常处理基本概念
      • 3.2 异常处理方法
    • 4 异常的传递与自定义方法
      • 4.1 异常的传递
      • 4.2 在逻辑错误中抛出异常
      • 4.3 异常处理注意的问题

1 异常处理的引入

1.1 为什么需要异常处理

C#中的异常处理_第1张图片
我们程序中可能存在的安全隐患如下:

  • 网络故障导致数据库连接问题。
  • 用户的非法操作(数据验证失败)。
  • 数据处理中的任何意外(比如:查询超时、资源文件丢失等)。

1.2 没有异常处理的程序

C#中的异常处理_第2张图片


2 异常类Exception

2.1 .NET Framework中异常的设计架构

C#中的异常处理_第3张图片

2.2 常用的异常类型

与参数有关的异常类:此类异常类均派生于SystemException,用于方法成员传递参数时发生异常。

  • ArgumentException类:用于处理参数无效的异常。
  • FormatException类:用于处理参数格式错误的异常。

与数组有关的异常:以下三个类均继承于SystemException类。

  • IndexOutOfRangeException:用于处理下标超出了数组长度所引发的异常。
  • ArrayTypeMismatchException类:用于处理在数组中存储数据类型不正确的元素引发的异常。

与IO有关的异常:

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

内存溢出有关的异常:

  • OverFlowException:用于处理程序逻辑错误造成的死循环异常。

与算术有关的异常:

  • ArithmeticException类:用于处理与算术有关的异常,比如0做除数。

数据库操作异常类:

  • D不Exception类:用于处理所有数据源操作异常类的基类。
  • SqlException类:用于处理针对sql数据源的异常,比如数据库连接错误。

3 C#中的异常处理

3.1 异常处理基本概念

异常处理形式:

  1. 即时处理:发现异常随时处理并恢复程序。
  2. 抛出异常:捕获异常后,重新封装异常信息或直接抛给调用者。

编写异常处理的原则:
在可能发生异常的地方添加异常处理方法。

异常对象提供的重要信息:
C#中的异常处理_第4张图片

3.2 异常处理方法

C#中的异常处理_第5张图片

C#中的异常处理_第6张图片


4 异常的传递与自定义方法

4.1 异常的传递

底层方法将第一次捕获的异常传递给上级调用者进一步详细处理。
C#中的异常处理_第7张图片
中层调用者可以使用多路捕获异常并封装异常信息。
C#中的异常处理_第8张图片
注意:

  1. 多路捕获异常不是必须的,只有需要的时候才使用。
  2. 可以添加多个catch块。
  3. 一定要把Exception类放在最后。

顶层调用者即在用户界面中继续处理异常。
C#中的异常处理_第9张图片

4.2 在逻辑错误中抛出异常

在可能发生错误的地方自定义异常对象并抛出。
C#中的异常处理_第10张图片
注意:这种自定义异常并没有引发CLR的异常,而是从ApplicationException派生出来的,如果不处理也会导致应用程序的崩溃。主要应用场合时,独立开发的功能模块,为防止用户操作的逻辑错误。

4.3 异常处理注意的问题

异常只要捕获就应该处理。
C#中的异常处理_第11张图片
程序中的逻辑错误不应该使用异常捕获的方法解决。
C#中的异常处理_第12张图片

你可能感兴趣的:(C#)