System.ApplicationException

本文详细介绍了ApplicationException类,它是用户程序引发而非公共语言运行库引发的异常。文章解释了如何使用此类来创建自定义异常,并提供了关于其构造函数及属性的具体说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. ApplicationExceptionSystem.Exception 类继承而来。System.Exception 是所有异常类的基类。ApplicationException 由用户程序引发,而不是由公共语言运行库引发。如果打算设计需要创建自己的异常的应用程序,请从 ApplicationException 类派生。

2. ApplicationException 不提供有关异常的原因的信息。大多数情况下都不应引发此类的实例。如果此类被实例化,则描述该错误的可读消息应传递给构造函数。(从源码可以清楚的看到,ApplicationException实际上仅仅只有4个与其基类Exception签名相同的构造函数,而且在调用ApplicationException的构造函数的时候也仅仅是简单的调用Exception中对应签名的构造函数。唯一不同的就是标识异常号[base.SetErrorCode(-2146232832);],从这里可以看出从Exception中派生一个ApplicationException类出来仅仅就是为了区别异常的类别是“公共运行库级别”还是“应用程序级别”,而这个区别就是通过ErrorCode来区分的。)

3. ApplicationException的构造函数有 4 种重载函数

  •     Public Sub New() 
  •     Public Sub New(String)
  •     Protected Sub New(SerializationInfo, StreamingContext)
  •     Public Sub New(String, Exception)

        一个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);
   }
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值