黑马程序员_C#的异常处理机制

------- 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)不应该无限制的使用trycatch来隐藏程序可能存在的错误。

(3)只能引发异常,而不能作为返回值或参数返回异常。对于明显的错误,不应该定义抛出异常,而应该处理错误。

(4)不应该使用trycatch来控制程序的流程。

3.自定义异常

C#中所有的异常类型都继承自System.Exception,也就是说,System.Exception是所有异常类的基类总起来说,其派生类分为两种

(1) SystemException所有的CLR提供的异常类型都是由SystemException派生。 

(2) ApplicationException由用户程序引发,用于派生自定义的异常类型,一般不直接进行实例化。 

创建自定义异常类应严格遵循几个原则 :

(1) 声明可序列化(用于进行系列化,当然如果你不需要序列化。那么可以不声明为可序列化的) 

(2) 添加一个默认的构造函数 

(3) 添加包含message的构造函数 

(4) 添加一个包含message,及内部异常类型参数的构造函数 

(5) 添加一个序列化信息相关参数的构造函数


你可能感兴趣的:(异常处理,C#)