第13章异常处理和不安全代码 主要内容 本章主要介绍程序的异常处理,内容包括异常处理的机制、 捕捉异常、异常处理、抛出异常、重抛异常、异常链接;还 包括指针以及不安全代码的处理。本章学习的目标包括:理 解异常机制和异常类的层次结构;掌握异常处理的一般步骤 和过程;能够自定义异常类和重抛异常;理解C#中对不安全 代码的管理
第13章 异常处理和不安全代码 本章主要介绍程序的异常处理,内容包括异常处理的机制、 捕捉异常、异常处理、抛出异常、重抛异常、异常链接;还 包括指针以及不安全代码的处理。本章学习的目标包括:理 解异常机制和异常类的层次结构;掌握异常处理的一般步骤 和过程;能够自定义异常类和重抛异常;理解C#中对不安全 代码的管理。 主要内容
131基本概念 异常( Exception)是指程序执行期间发生了问题,一般是非 预料之中的错误。有异常的程序通常是指有可能发生问题,但 并不频繁。例如,x和y为浮点数,做除法x/y时,通常情况下 能够正确执行;可当y为0时就会出现问题,这时,系统会终止 正在运行的程序 通常情况下,异常会终止用户程序,并发出一条系统提供的错 误信息。 异常处理( Exception Handing)指的是一种机制或者方法, 通过它,用户创建的应用程序能够解决或处理异常。一般情况 下,通过对异常进行处理,程序就如同没有出现过问题一样可 以继续执行,而不是被强行终止
13.1 基本概念 异常(Exception)是指程序执行期间发生了问题,一般是非 预料之中的错误。有异常的程序通常是指有可能发生问题,但 并不频繁。例如,x和y为浮点数,做除法x/y时,通常情况下 能够正确执行;可当y为0时就会出现问题,这时,系统会终止 正在运行的程序。 通常情况下,异常会终止用户程序,并发出一条系统提供的错 误信息。 异常处理(Exception Handing)指的是一种机制或者方法, 通过它,用户创建的应用程序能够解决或处理异常。一般情况 下,通过对异常进行处理,程序就如同没有出现过问题一样可 以继续执行,而不是被强行终止
131.1异常类 在面向对象的语言中,异常是面向对象规范的一部分。异常 也称为差错或违例,是特殊的运行错误对象,对应着C#特定 的运行错误处理机制 C#提供一个标准类 System Exception,是出现运行错误时,系 统或用户引发的一个对象或者一个对象的基类。C#有一个异 常处理机制,但只允许引发和捕捉 Exception类的对象及其派 生类
13.1.1 异常类 在面向对象的语言中,异常是面向对象规范的一部分。异常 也称为差错或违例,是特殊的运行错误对象,对应着C#特定 的运行错误处理机制。 C#提供一个标准类System.Exception,是出现运行错误时,系 统或用户引发的一个对象或者一个对象的基类。C#有一个异 常处理机制,但只允许引发和捕捉Exception类的对象及其派 生类
1312异常的层次结构 System Exception是C#异常的基类,其派生类包括以下几类: ■ System Application Exception:最重要的派生类之一。它由用户程序而不是 由公共语言运行库引发,作为一种区分应用程序定义的异常与系统定义的异常 的方法而提供。 System IC. Isolated Storage. IsolatedStorage Exception:独立存储异常,在缺 少证据或无效操作时发生。 System. Runtime Remoting. MetadataServices SUDSGenerator Exception: HE 成web服务描述语言WSDL的过程中发生错误时将引发的异常,由远程处理 WSDL生成器生成。 System. Runtime Remoting. MetadataServices SUDSParser Exception: T web服务描述语言WSDL的过程中发生错误时将引发的异常,由远程处理 WSDL分析器生成。 System SystemException:最重要的派生类之一。当发生非致命的、可由用 户程序恢复的错误时,公共语言运行时引发该类对象。 ■ System. Windows. Forms, AxHost. InvalidActiveXState Exception:引用处于无 效状态的 ActiveX控件时引发的异常
13.1.2 异常的层次结构 System.Exception是C#异常的基类,其派生类包括以下几类: ◼ System.ApplicationException:最重要的派生类之一。它由用户程序而不是 由公共语言运行库引发,作为一种区分应用程序定义的异常与系统定义的异常 的方法而提供。 ◼ System.IO.IsolatedStorage.IsolatedStorageException:独立存储异常,在缺 少证据或无效操作时发生。 ◼ System.Runtime.Remoting.MetadataServices.SUDSGeneratorException:生 成Web服务描述语言WSDL的过程中发生错误时将引发的异常,由远程处理 WSDL生成器生成。 ◼ System.Runtime.Remoting.MetadataServices.SUDSParserException:分析 Web服务描述语言WSDL的过程中发生错误时将引发的异常,由远程处理 WSDL分析器生成。 ◼ System.SystemException:最重要的派生类之一。当发生非致命的、可由用 户程序恢复的错误时,公共语言运行时引发该类对象。 ◼ System.Windows.Forms.AxHost.InvalidActiveXStateException:引用处于无 效状态的ActiveX 控件时引发的异常
1313公共异常类 System ArithmeticException:在算术运算期间发生的异常(如 ystem Divide by zeroException和 System Overflow Exception)的基类。 stem Array Type Mismatch Exception:当存储一个数组时,如果由于被存储的元素 的实际类型与数组的实际类型不兼容而导致存储失败,就会引发此异常 System Divide By ZeroException:在试图用零除整数值时引发。 ystem Index OutofRange Exception:在试图使用小于零或超出数组界限的下标索引 数组时引发。 System. Invalid CastException:当从基类型或接口到派生类型的显式转换在运行时失 败时,就会引发此异常。 System. NullReference Exception:在需要使用引用对象的场合,如果使用nul引用, 就会引发此异常 ystem. OutOfMemory Exception:在分配内存(通过new)的尝试失败时引发。 ystem Overflow Exception:在 checked上下文中的算术运算溢出时引发 System StackOverflow Exception:当执行堆栈由于保存了太多挂起的方法调用而耗尽 时,就会引发此异常;这通常表明存在非常深或无限的递归 System. TypeInitialization Exception:在静态构造函数引发异常并且没有可以捕捉到它 的 catch子句时引发
13.1.3 公共异常类 ◼ System.ArithmeticException:在算术运算期间发生的异常(如 System.DivideByZeroException 和 System.OverflowException)的基类。 ◼ System.ArrayTypeMismatchException:当存储一个数组时,如果由于被存储的元素 的实际类型与数组的实际类型不兼容而导致存储失败,就会引发此异常。 ◼ System.DivideByZeroException:在试图用零除整数值时引发。 ◼ System.IndexOutOfRangeException:在试图使用小于零或超出数组界限的下标索引 数组时引发。 ◼ System.InvalidCastException:当从基类型或接口到派生类型的显式转换在运行时失 败时,就会引发此异常。 ◼ System.NullReferenceException:在需要使用引用对象的场合,如果使用 null 引用, 就会引发此异常 ◼ System.OutOfMemoryException:在分配内存(通过 new)的尝试失败时引发。 ◼ System.OverflowException:在 checked 上下文中的算术运算溢出时引发。 ◼ System.StackOverflowException:当执行堆栈由于保存了太多挂起的方法调用而耗尽 时,就会引发此异常;这通常表明存在非常深或无限的递归。 ◼ System.TypeInitializationException:在静态构造函数引发异常并且没有可以捕捉到它 的 catch 子句时引发