1.1异常

C# 中的异常用于处理系统级和应用程序级的错误状态,它是一种结构化的、统一的和类型安全的处理机制。

1.2导致异常的原因

throw 语句用于立即无条件地引发异常。控制永远不会到达紧跟在 throw 后面的语句。

在处理 C# 语句和表达式的过程中,有时会出现一些例外情况,使某些操作无法正常完成,此时就会引发一个异常。

1.3 异常的处理方式

异常是由 try 语句处理的。有三种可能的 try 语句形式:

一个 try 块后跟一个或多个 catch 块。

一个 try 块后跟一个 finally 块。

一个 try 块后跟一个或多个 catch 块,后面再跟一个 finally 块

备注:

既不指定异常类型也不指定异常变量名的 catch 子句称为常规 catch 子句。一个 try 语句只能有一个常规 catch 子句,而且它必须是最后一个 catch 子句。常规的 catch 子句在语义上不同于指定了 System.Exception 类型的那些子句,因为前者还可以捕获来自其他语言的异常。

1.4  try 语句按下列规则执行:

(1)控制转到 try 块。

(2)如果在 try 块执行期间,如果产生异常,则生成异常对象。

(3)按 catch 子句出现的顺序逐个对其进行检查,以找到一个合适的异常处理程序。

(4) 控制转到匹配的 catch 块。如果匹配的 catch 子句声明一个异常变量,则当前的异常对象被赋给该异常变量。当(如果)控制到达 catch 块的结束点时:

(5)如果 try 语句具有 finally 块,则执行 finally 块。

finally 块中的语句总是会被执行。无论finally块前面的语句是否执行了 break、continue、goto 或 return 语句,或是执行一个导致离开 try 语句的异常传播。

 

1.5 throw 语句引发一个异常。

throw-statement:(throw 语句:)

带表达式的 throw 语句引发一个异常,异常类型是 System.Exception 或从 System.Exception 派生的类类型。

不带表达式的 throw 语句只能用在 catch 块中,在这种情况下,该语句重新引发当前正由该 catch 块处理的那个异常。(重新抛出异常)

由于 throw 语句无条件地将控制转到别处,因此throw 语句后的语句永远无法到达。

1.6 System.Exception 类

System.Exception 类是所有异常的基类型。此类具有一些所有异常共享的值得注意的属性:

公共属性

HelpLink

获取或设置指向此异常所关联帮助文件的链接。

InnerException

获取导致当前异常的 Exception 实例。

Message

获取描述当前异常的消息。Message 是 string 类型的一个只读属性,它包含关于所发生异常的原因的描述(适合人类阅读)。

 

Source

获取或设置导致错误的应用程序或对象的名称。

StackTrace

获取当前异常发生时调用堆栈上的帧的字符串表示形式。

TargetSite

获取引发当前异常的方法。

 

4 公共异常类

下列异常由某些 C# 操作引发。

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 子句时引发。

  http://liyingyi139.spaces.live.com/blog/cns!be83f5fbc3b1326!132.entry

posted on 2007-03-05 16:34  mbskys  阅读(287)  评论(0)    收藏  举报