------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
.NET框架提供一种标准的错误报告机制称为结构化异常处理。这种机制依赖于应用中报告错误的异常。
在.NET中,异常是一些提供错误信息的类,你可以某种方式编写代码监视异常的发生,然后以一种适当的方法处理异常。
在进行C#异常处理时,你需要在代码中关注三个部分:可能导致异常的代码段(这也通常称为抛出异常)。当执行代码过程中发生异常时将要执行的代码段(这也通常称为捕获异常)。
编程程序出现错误总是难免的,但我们需要使用各种各样的方法去尽量避免错误,或者说把错误的影响降到最低。所以,无论如何我们写什么程序都需要使用到C#的异常处理的方式。1.那在.NET中如果捕获错误呢!使用语句:
try
{
//有可能出错的代码
}
catch()
{
//错误处理
}
finally
{
//通常用于清理资源或执行通常要在try块活catch块末尾执行的其他操作,可选。
}
代码的执行步骤:
(1)执行的程序进入try。
(2)如果try中没有错误发生,就会跳过catch往下执行finally(如果有)。如果在try中有错误,则会跳到catch中处理错误。
(3)在catch中处理错误
(4)在catch中错误完错误后,就会到finally(如果有)执行。
(5)执行finally。
简单例子:
int i, x, y;
try
{
i = x / y;
}
catch(Exception ex)
{
Console.WriterLine(“除数等于0”);
i = 0;
}
finally
{
return i;
}
2.抛出自定义的错误消息
如:
public int Div(int x, int y)
{
int z = x / y;
if(y == 0)
{
throw new Exception(“除数为0”);
}
return z;
}
try
{
i = Div(x, y)
}
catch(Exception ex)
{
Console.WriterLine(ex.message());
}
输入的结果为:除数为0
对于异常需要注意的情况:
(1)不应使用异常来更改正常执行过程中的程序流程。异常只能用于报告和处理错误条件。
(2)不应该无限制的使用try,catch来隐藏程序可能存在的错误。
(3)只能引发异常,而不能作为返回值或参数返回异常。对于明显的错误,不应该定义抛出异常,而应该处理错误。
(4)不应该使用try,catch来控制程序的流程。
3.自定义异常
在C#中所有的异常类型都继承自System.Exception,也就是说,System.Exception是所有异常类的基类. 总起来说,其派生类分为两种:
(1) SystemException类: 所有的CLR提供的异常类型都是由SystemException派生。
(2) ApplicationException类: 由用户程序引发,用于派生自定义的异常类型,一般不直接进行实例化。
创建自定义异常类应严格遵循几个原则 :
(1) 声明可序列化(用于进行系列化,当然如果你不需要序列化。那么可以不声明为可序列化的)
(2) 添加一个默认的构造函数
(3) 添加包含message的构造函数
(4) 添加一个包含message,及内部异常类型参数的构造函数
(5) 添加一个序列化信息相关参数的构造函数.