赞
踩
1. ApplicationException 由 System.Exception 类继承而来。System.Exception 是所有异常类的基类。ApplicationException 由用户程序引发,而不是由公共语言运行库引发。如果打算设计需要创建自己的异常的应用程序,请从 ApplicationException 类派生。
2. ApplicationException 不提供有关异常的原因的信息。大多数情况下都不应引发此类的实例。如果此类被实例化,则描述该错误的可读消息应传递给构造函数。(从源码可以清楚的看到,ApplicationException实际上仅仅只有4个与其基类Exception签名相同的构造函数,而且在调用ApplicationException的构造函数的时候也仅仅是简单的调用Exception中对应签名的构造函数。唯一不同的就是标识异常号[base.SetErrorCode(-2146232832);],从这里可以看出从Exception中派生一个ApplicationException类出来仅仅就是为了区别异常的类别是“公共运行库级别”还是“应用程序级别”,而这个区别就是通过ErrorCode来区分的。)
3. ApplicationException的构造函数有 4 种重载函数
一个ApplicationException类有多个属性。不同的构造函数就是在生成ApplicationException类实例对象的时候对对象中的不同的属性进行赋值操作。其中有一个构造函数是Protected,这个构造函数是在反序列化过程中调用该构造函数来重建通过流传输的异常对象。它不能被直接调用来生成ApplicationException类的实例对象。
ApplicationException 属性:
1. InnerException: 引发当前异常的前一个异常。这样就形成了一条异常链。通过这个异常链就可以追溯到最原始的异常。从而得到不同级别的异常信息。参考下面的代码:
using System;
namespace testDotNetFramework
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
Exception original_ex = new Exception("原始异常");
//这里将original_ex 设置为current_ex的innerException,否则在调用current_ex.InnerException.Message的时
//候会抛出“未将对象引用设置到对象实例”的异常。所以在使用InnerException属性的时候需要先判断一下
//ex.InnerException == null
Exception current_ex = new Exception("当前异常", original_ex);
throw (ex);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.InnerException.Message);
}
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。